Страница 1 из 2

Как привязывать руки к оружию?

СообщениеДобавлено: 15 сен 2022, 17:25
Zimaell
Занимаюсь вот анимацией и подошел к вопросу - как привязать оружие к рукам, я понимаю что это связано с IK, но никак не могу понять с чего начать.
Во первых что у меня имеется, персонаж бегает во все стороны по типу topdown, бегает в стороны по нажатию WASD а целится туда куда мышкой указываю, персонаж бегает как нужно и поворачивается в сторону курсора.
Что я сделал - привязал автомат к правой руке, при прицеливании смотрит не туда куда нужно, получается нужно автомату смотреть в сторону курсора, но тогда как руки к нему привязать...
В общем не пойму что ведомое а что ведущее, что куда должно крепиться и что куда должно смотреть.
Подскажите что да как?

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 03:46
Saltant
На ютубе есть куча видосов по IK в чем проблема?

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 19:45
NOVA
Досконально не помню как делал.




Но так то всё правильно. Вроде оружие цеплять к правой руке, а левую IK на цевьё.

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 19:51
Zimaell
NOVA писал(а):Досконально не помню как делал.
Но так то всё правильно. Вроде оружие цеплять к правой руке, а левую IK на цевьё.

У меня немного другая ситуация, TopDown, сам прицел это 3D курсор, вот сделал что-то подобное
Синтаксис:
Используется csharp
private void Update(){
  leftHand.position = WeaponLeftHandler.position; // WeaponLeftHandler точка на оружии к которой крепится рука
  leftHand.rotation = WeaponLeftHandler.rotation; // leftHand пустышка на персонаже
  }
   
private void OnAnimatorIK(){
  anim.SetLookAtWeight(1f, 1f, 1f);
  anim.SetLookAtPosition(Target); // Tagret курсор в который должен целиться, по сути туда должно смотреть дуло
  anim.SetIKPositionWeight(AvatarIKGoal.LeftHand, 1);
  anim.SetIKRotationWeight(AvatarIKGoal.LeftHand, 1);  
  anim.SetIKPosition(AvatarIKGoal.LeftHand, leftHand.position);
  anim.SetIKRotation(AvatarIKGoal.LeftHand, leftHand.rotation);

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

и да, оружие прицепил к правой руке, IK к левой...

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 20:02
NOVA
Ну вообще не помню, я такими методами и не пользовался 5 лет назад. Оружие входит в состав Меканим? У меня вроде было отдельным объектом. Оси пивота соответствуют? Где модели вообще делались. Пивот. Центр тяжести ствола должен находится именно в центре ладони правой руки. Вектор длины ствола должен быть направлен на курсор. Левая рука на цевье. Проверьте все эти вещи. Кажется вспоминаю, да. Дробовик не входил в состав скелета Mecanim.
Вроде так. Оружие отдельный объект. Цепляем за правую руку. Направляем на цель. Цепляем левую руку за цевьё. Делаем переходы.

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 20:27
Zimaell
NOVA писал(а):Ну вообще не помню, я такими методами и не пользовался 5 лет назад. Оружие входит в состав Меканим? У меня вроде было отдельным объектом. Оси пивота соответствуют? Где модели вообще делались. Пивот. Центр тяжести ствола должен находится именно в центре ладони правой руки. Вектор длины ствола должен быть направлен на курсор. Левая рука на цевье. Проверьте все эти вещи. Кажется вспоминаю, да. Дробовик не входил в состав скелета Mecanim.
Вроде так. Оружие отдельный объект. Цепляем за правую руку. Направляем на цель. Цепляем левую руку за цевьё.

да оружие отдельные объект, да и всё вроде как вы описали, то вот "направляем на цель" вот тут проблемка, пивот по уроку у меня в плече правом, ну то такое, главное чтобы "куда" целился, вот тут я и не пойму этого вектора.
Я так понимаю линия должна проходить
от
Синтаксис:
Используется csharp
anim.SetIKPosition(AvatarIKGoal.LeftHand, LeftHand.position);

до
Синтаксис:
Используется csharp
anim.SetLookAtPosition(Target);

так?
но я сделал дебаг
Синтаксис:
Используется csharp
Debug.DrawRay(LeftHand.position, Target, Color.green);

и у меня начальная точка на левой руке а вот конечная точка куда-то в непонятном направлении вверх улетает, вот и не пойму почему не в сторону курсора...

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 20:34
Zimaell
или как раз в том и проблема что если луч в сторону курсора не смотрит то и персонаж...
только чего не смотрит в него, ведь заданы два вектора - левая рука и курсор, позиции через дебаг проверил и всё правильно, не пойму...

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 20:39
Zimaell
ради принципа провёл следующий тест
Синтаксис:
Используется csharp
Debug.DrawRay(Vector3.zero, Target, Color.blue);

всё как и задумано, из центра луч всегда до курсора...
а с прицелом что не так не пойму...

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 20:46
NOVA
Я думаю, чот Вы там накосячили. Отцепите ствол и просто направьте на цель из камеры. И кстати про камеру не забывайте. Она тоже должна туда смотреть. Прям параллельно стволу. Работайте сами. Я просто на мысли навожу. В код даже не вчитывался. Отцепитесь от меканим сначала, проверьте. Как бы если объект нормально наводится, если он не дочка объекта, то и дочкой объекта он будет нормально наводится. Там останется только левую руку прицепить. Где-то косяк в коде. А с утра в субботу косяки в коде находятся в 4 раза быстрее чем в пятницу вечером.
Тут ещё это. родительские объекты любят отдавать свои координаты вращения дочерним. Поэтому никаких парент. Только трансформпозишн и лукат.

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 21:05
Zimaell
NOVA писал(а):Я думаю, чот Вы там накосячили. Отцепите ствол и просто направьте на цель из камеры. И кстати про камеру не забывайте. Она тоже должна туда смотреть. Прям параллельно стволу. Работайте сами. Я просто на мысли навожу. В код даже не вчитывался. Отцепитесь от меканим сначала, проверьте. Как бы если объект нормально наводится, если он не дочка объекта, то и дочкой объекта он будет нормально наводится. Там останется только левую руку прицепить. Где-то косяк в коде. А с утра в субботу косяки в коде находятся в 4 раза быстрее чем в пятницу вечером.
Тут ещё это. родительские объекты любят отдавать свои координаты вращения дочерним. Поэтому никаких парент. Только трансформпозишн и лукат.

конечно где-то накосячил, иначе работало бы как хотелось бы...
на счёт камеры - у меня нет привязки к камере так как TopDown, то есть камера статически смотрит сверху.
отдельно пушка смотрит на курсор, а когда прицеплена к персонажу то вот такое...
что ж буду искать методом тыка...

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 16 сен 2022, 21:42
Alkos26Rus
Zimaell писал(а):ради принципа провёл следующий тест
Синтаксис:
Используется csharp
Debug.DrawRay(Vector3.zero, Target, Color.blue);

всё как и задумано, из центра луч всегда до курсора...
а с прицелом что не так не пойму...

Не правильно DrawRay пользуешь, сначала позиция затем направление, а у тебя 2 позиции

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 17 сен 2022, 11:20
Zimaell
Alkos26Rus писал(а):
Zimaell писал(а):ради принципа провёл следующий тест
Синтаксис:
Используется csharp
Debug.DrawRay(Vector3.zero, Target, Color.blue);

всё как и задумано, из центра луч всегда до курсора...
а с прицелом что не так не пойму...

Не правильно DrawRay пользуешь, сначала позиция затем направление, а у тебя 2 позиции

не понял, вот провёл 2 вектора
Синтаксис:
Используется csharp
Debug.DrawRay(Vector3.zero, Target.position, Color.green);
Debug.DrawRay(WeaponAim.position, Target.position, Color.red);

а в коде оружия так
Синтаксис:
Используется csharp
WeaponAim.LookAt(Target);

вот что получилось
https://ibb.co/q0zYLqj
в теории две линии должны приходить в таргет, что не так то?

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 17 сен 2022, 13:47
Alkos26Rus
Синтаксис:
Используется csharp
Vector3 dir = Target.position - WeaponAim.position;
Debug.DrawRay(WeaponAim.position, dir);
 

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 17 сен 2022, 16:16
Zimaell
Alkos26Rus писал(а):
Синтаксис:
Используется csharp
Vector3 dir = Target.position - WeaponAim.position;
Debug.DrawRay(WeaponAim.position, dir);
 

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

Re: Как привязывать руки к оружию?

СообщениеДобавлено: 17 сен 2022, 16:21
Saltant
Оружие должно быть в контейнере (отдельный геймобжект), луч должен стрелять из ствола оружия соответственно.