Есть острая необходимость скрестить существующую анимацию с программной частью, а именно поворачивать торс тела в момент выстрела из лука в ту сторону, куда смотрит камера. Сейчас у меня реализована следующая система: Я отслеживаю направление камеры и в зависимости от него получаю точку в пространстве к которой тянусь левой рукой (в которой лук) с помощью IK А правой рукой в момент оттягивания тетивы тянусь к самой тетиве.
Код
void OnAnimatorIK() { if (LeftHandTarget!=Vector3.zero) { tAnim.SetLookAtPosition(CC.TargetForFire); tAnim.SetLookAtWeight(1.0f); if (needIKLeftHand) { tAnim.SetIKPositionWeight(AvatarIKGoal.LeftHand, 0.2f); tAnim.SetIKPosition(AvatarIKGoal.LeftHand, LeftHandTarget); } if (needIKRightHand) { tAnim.SetIKPositionWeight(AvatarIKGoal.RightHand, 1f); tAnim.SetIKPosition(AvatarIKGoal.RightHand, RightHandTarget); } } }
Система, в принципе, работает, но при определённых углах поворота получаются такие неприятные вещи, что руку может загнуть, она проходит сквозь голову, а даже когда всё анатомически верно, персонаж держит лук так, как в жизни человек бы никогда не смог...
Посему я подумал, что позицию рук хорошо бы оставить в тех положениях, в которых они стоят в анимации, а крутить торсом, но как это реализовать, честно говоря, никаких мыслей не нашёл. Заранее благодарю за любой совет!
NapalmRain, я в подобном случае просто находил тазовую кость (или чуть выше, не помню) и ее вращал в зависимости от направления камеры. Но это было только для горизонтального разворота. end.
Просто расскажу как у меня было. Ситуация похожая - гранатомёт пересекался с головой. Блендер позволяет поставить систему ограничителей. И без ручного труда заново сохранить новую анимацию. Но! Анимация стала неестественной, а гранатомёт смотрел не в ту сторону. Кончилось тем что пришлось к существующим добавить ещё две анимации, специально для поворота торса. 2 часа - и готово. Перед этим зря целый день потерял, пытаясь изобрести костыль, а надо было просто сделать анимации и не мучаться.
DjeeZ, да, я об этом тоже уже думал. Но ввиду недостатка знаний всё таки полагал, что есть именно механизм, позволяющий реализовать нечто подобное, а вариант с анимациями решил оставить на крайний случай. Но сейчас он мне кажется уже более логичным. Благодарю за совет!
Механизм существует, в Блендере мощнейшая система анимации и результат есть, но выглядит ужасно. Мне трудно представить, что-бы в игровом движке можно было сделать лучше. Хотя все анимации разные, мне с моей не повезло, а у кого-то, возможно, прокатит. Если мало опыта, то сделать анимацию под поворот торса может оказаться трудным. Позволю себе ещё один маленький совет, как будет проще. Программно отдельно сначала поворачивай голову, а потом доворачивай торс на тот же угол. Если существующие анимации разделить на отдельные 3 (для ног; торса и рук; головы если требуется), то сочетать анимации с программными поворотами будет намного проще.
Добавлено (20 Апр 2016, 15:27) --------------------------------------------- Я тут еще подумал. Можно попробовать сделать наоборот. Поворачивать программно ноги, а не торс. Если развернуть по нужному направлению всё тело, а ноги одновременно крутить в обратную сторону, так, что-бы они оставались на месте, то анимация в верхней части будет работать правильно. Желательно, правда, всё-таки голову раньше повернуть, для естественности, но это на усмотрение. Возможно такой вариант устроит.