Босс с вращающейся рукой.

Программирование на Юнити.

Босс с вращающейся рукой.

Сообщение jigsawjigsaw 20 сен 2017, 20:37

Здравствуйте.
Есть простая задача.
В игре есть вот такой босс
Изображение
Есть объект босс и у него наследуется рука с оружием а у оружия есть дуло(я назвал его rcast).
Я написал вот такой код благодаря которому дуло ружья поворачивается в сторону персонажа.

Скрытый текст:
Vector3 dir = new Vector3(0,0,0);
dir = target.transform.position - rcast.transform.position;

rrr = Mathf.Atan2 (dir.y, dir.x) * Mathf.Rad2Deg - 180;
transform.rotation = Quaternion.Euler(new Vector3(0,0,rrr));


Все работает, но есть вот такая проблема.
Изображение

Если Босс падает то рука откланяется от тела не смотря на то что она унаследована.

Мне нужно сделать так чтобы рука была закреплена к боссу а дуло ружья (конец руки) поворачивался в сторону объекта. Как решить эту задачу?
jigsawjigsaw
UNIт
 
Сообщения: 56
Зарегистрирован: 25 авг 2016, 21:23

Re: Босс с вращающейся рукой.

Сообщение Andrey328 20 сен 2017, 21:48

У transform есть два параметра, которые мы сейчас рассмотрим: rotation и localRotation.
rotation - это глобальный поворот объекта, который ни от чего не зависит. В том числе и от поворота родительского объекта.
localRotation - это локальный поворот объекта, и на его основе, а так же на основе всех других факторов (в том числе и поворот родительского объекта) движок пересчитает глобальный поворот объекта.

Таким образом, надо задавать поворот не так
Синтаксис:
Используется csharp
transform.rotation = Quaternion.Euler(new Vector3(0,0,rrr));

, а так:
Синтаксис:
Используется csharp
transform.localRotation = Quaternion.Euler(new Vector3(0,0,rrr));
Andrey328
UNец
 
Сообщения: 3
Зарегистрирован: 19 сен 2017, 17:00

Re: Босс с вращающейся рукой.

Сообщение samana 20 сен 2017, 22:00

Andrey328 писал(а):У transform есть два параметра, которые мы сейчас рассмотрим: rotation и localRotation.
rotation - это глобальный поворот объекта, который ни от чего не зависит. В том числе и от поворота родительского объекта.
localRotation - это локальный поворот объекта, и на его основе, а так же на основе всех других факторов (в том числе и поворот родительского объекта) движок пересчитает глобальный поворот объекта.

Таким образом, надо задавать поворот не так
Синтаксис:
Используется csharp
transform.rotation = Quaternion.Euler(new Vector3(0,0,rrr));

, а так:
Синтаксис:
Используется csharp
transform.localRotation = Quaternion.Euler(new Vector3(0,0,rrr));


А мне кажется совсем наоборот, ведь рука должна смотреть на цель вне зависимости от того, как повёрнут её родительский объект.
Но почему у автора именно позиция руки остаётся на месте - загадка. Возможно что-то не озвучено, либо позиция руки тоже как-то контролируется... :-??
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Босс с вращающейся рукой.

Сообщение jigsawjigsaw 20 сен 2017, 22:34

Спасибо за ответы. Я понял Ошибку. Просто на руке был Элемент Rigidbody2d. Если его убрать то положение руки не меняется
jigsawjigsaw
UNIт
 
Сообщения: 56
Зарегистрирован: 25 авг 2016, 21:23


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6