LINUX.ORG.RU

Кто в Unity3D работает, нужна помощь

 


0

1

Тут кто-то делал на юнити игры. Надеюсь что они еще на форуме остались, ибо мне реально больше негде спросить.

Нужно сделать чтобы ноги поворачивались(делаю игру с видом сверху). Тазовой кости в модели нет, есть только ноги. Через transform.rotation все это плохо работает. Решил сделать через Mecanim(т.к. скелет я решил делать Humanoid):

if(Input.GetAxis("Horizontal"))
{
ac.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 1);
ac.SetIKRotation(AvatarIKGoal.LeftFoot, Quaternion.LookRotation(cam.transform.right*Input.GetAxis("Horizontal")));
ac.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1);
ac.SetIKRotation(AvatarIKGoal.RightFoot, Quaternion.LookRotation(cam.transform.right*Input.GetAxis("Horizontal")));	
}
if(Input.GetAxis("Vertical"))
{
ac.SetIKRotationWeight(AvatarIKGoal.LeftFoot, 1);
ac.SetIKRotation(AvatarIKGoal.LeftFoot, Quaternion.LookRotation(cam.transform.up*Input.GetAxis("Vertical")));
ac.SetIKRotationWeight(AvatarIKGoal.RightFoot, 1);
ac.SetIKRotation(AvatarIKGoal.RightFoot, Quaternion.LookRotation(cam.transform.up*Input.GetAxis("Vertical")));	
}

Получилось через жопу. Т.е. нормально сделать поворот ног я не могу как во всех нормальных TDS. Вообще в этом плане я ориентируюсь на очень старый пример Angry Bots, и часть механики решил скопировать оттуда. Но в том коде я не разобрался что к чему, к тому же там legacy анимация. Так что прошу помощи тех лоровцев, кто работает с Unity3D.



Последнее исправление: JB (всего исправлений: 2)

Ну правильно, на скрине в чистом виде то, что я вижу в коде. Вам точно нужно IK здесь, нельзя обойтись штатными слоями анимации? Я понимаю, если нужно делать ходьбу по лестнице, там без IK никуда, нужно, чтобы ноги попадали по ступенькам, но это задача несколько проще, чем половину модели крутить через IK.

Оффтоп: про просьбу о фильтре ютуба я не забыл, неделю базу набивал, сейчас тестирую. На днях собираюсь выложить в открытый доступ.

Sadler ★★★
()
Ответ на: комментарий от Sadler

про просьбу о фильтре ютуба я не забыл

Ну я не требую, просто когда будет готово дополнение, просьба написать в любую из моих тем, сразу же установлю. Не обязательно, просто вопрос: а по ключевым словам можно там будет фильтровать видео?

Ну правильно, на скрине в чистом виде то, что я вижу в коде. Вам точно нужно IK здесь, нельзя обойтись штатными слоями анимации?

Меканим я использую потому что с ним несколько проще, т.е. я могу использовать для персонажа любую анимацию которая работает с Humanoid. А про поворот я говорил что хочу что-то типа этого(прошу прощения что не указал в самом посте видео), т.е. тут видно что вращается именно таз и все что ниже, но опять же там нет тазовой кости и все смотрится нормально(а может просто ноги в анимации удачно расположены). Но то что в коде я сделал именно меканимом поворот объясняется тем что когда я вращал именно через transform.rotate, то получалось фиг пойми что, и получалось так что там вращение происходило не по одной оси а сразу по трем(почему, я не знаю). Что интересно, если выделить кости сразу обеих ног и попробовать вращать то все получается нормально(я так понял там ось вращения находится между ногами что и дает нормально поворачивать все это, возможно можно как-то узнать «среднюю» точку между ними и вращать именно ее?).

ozzee
() автор топика
Ответ на: комментарий от ozzee

Не обязательно, просто вопрос: а по ключевым словам можно там будет фильтровать видео?

Фильтрация у меня пока только на уровне каналов. То есть по регекспу типа ".*VEVO$" уже вполне можно фильтровать, вышеозначенный регексп я сам юзаю, а вот по имени ролика или описанию я не делал фильтров.

т.е. тут видно что вращается именно таз и все что ниже, но опять же там нет тазовой кости и все смотрится нормально(а может просто ноги в анимации удачно расположены

Но то что в коде я сделал именно меканимом поворот объясняется тем что когда я вращал именно через transform.rotate, то получалось фиг пойми что

Я предлагаю не делать ни так, ни эдак. У меканима есть механизм слоёв анимации: просто рисуем анимацию для поворота нижней части туловища и примешиваем её слоем ко всей остальной анимации. Не придётся даже руками вращать модельку, т.к. поворот можно вшить в саму анимацию. Лично у меня не было задачи такого чёткого отделения ног от туловища, так что могу чего-то упустить, но задача видится мне достаточно стандартной, под неё вообще кода никакого не надо, кроме привязки Input-ов к анимации меканима.

Sadler ★★★
()
Ответ на: комментарий от Sadler

просто рисуем анимацию для поворота нижней части туловища и примешиваем её слоем ко всей остальной анимации

Нет, это не вариант. Т.е. уже надо делать 8 анимаций вместо одной, а то и больше. А еще это позволяет проводить операции типа Quaternion.Slerp для плавного поворота(что мне и понадобится, т.к. просто чтобы ноги были на одном месте это будет выглядеть топорно, в Hotline Miami это еще простительно, т.к. там 2D, а мне надо будет делать так чтобы при определенном угле персонажа ноги поворачивались к нему же(опять же как в Angry Bots), и оттуда уже можно будет на основе того угла делать повороты).

ozzee
() автор топика
Ответ на: комментарий от Sadler

То есть по регекспу типа ".*VEVO$" уже вполне можно фильтровать

Это просто замечательно.

ozzee
() автор топика
Ответ на: комментарий от ozzee

А еще это позволяет проводить операции типа Quaternion.Slerp для плавного поворота

Можно сделать 3 анимации с разным поворотом и смешивать их параметром, который будет задавать поворот ног относительно туловища. Либо можно сделать реалистичные повороты на разные углы (чтобы персонаж красиво переступал/оборачивался, а не вращался) и смотреть скриптом, когда следует запускать анимацию, чтобы ноги не были неестественно повёрнуты. Не представляю, почему бы это было топорнее текущего подхода, но подводные камни есть и там, конечно. Скажем, если наоборот root объекта крутить анимацией ног, то может пострадать отзывчивость: персонаж не будет мгновенно поворачиваться в сторону курсора, что, конечно, выглядит красиво, но при динамичном геймплее будет бесить.

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 2)
Ответ на: комментарий от Sadler

И все же. Лучше сделать как мне кажется именно поворотом, а не анимацией. Понимаю конечно что я сейчас упертый как баран, но мне нужен именно этот способ.

ozzee
() автор топика
Ответ на: комментарий от ozzee

Ну, этим способом я не делал, так что помочь не смогу. Разве что вот: https://docs.unity3d.com/ScriptReference/Animator.SetBoneLocalRotation.html

Can be used to create rotation IK goals for any human bone. Ex: Control lower and upper body independantly by setting Hips and Spine local rotation during an IK pass.

Sadler ★★★
()
Ответ на: комментарий от Sadler

Не могу понять как оно работает. То есть я указал нужную кость, а она поворачивается не туда куда нужно.

ozzee
() автор топика
Ответ на: комментарий от ozzee

Rotation там local, то есть относительно заранее заданных в скелете осей, так что может потребоваться преобразование в world space, чтобы было понятнее. В принципе, можно для примера сделать скрипт, который будет поворачивать кость строго по одной оси — сразу будет видно, как расположены оси.

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)

Кто в Unity3D работает, нужна помощь
Тут кто-то делал на юнити игры.

Эта ваша руская языка такая сложная. Вам нужен человек, который работает в компании или тот, кто работает с продуктом этой компании?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Пардон, да, у меня с логикой бывают проблемы.

ozzee
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.