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

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

СообщениеДобавлено: 20 сен 2017, 20:37
jigsawjigsaw
Здравствуйте.
Есть простая задача.
В игре есть вот такой босс
Изображение
Есть объект босс и у него наследуется рука с оружием а у оружия есть дуло(я назвал его 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));


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

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

Мне нужно сделать так чтобы рука была закреплена к боссу а дуло ружья (конец руки) поворачивался в сторону объекта. Как решить эту задачу?

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

СообщениеДобавлено: 20 сен 2017, 21:48
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));

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

СообщениеДобавлено: 20 сен 2017, 22:00
samana
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));


А мне кажется совсем наоборот, ведь рука должна смотреть на цель вне зависимости от того, как повёрнут её родительский объект.
Но почему у автора именно позиция руки остаётся на месте - загадка. Возможно что-то не озвучено, либо позиция руки тоже как-то контролируется... :-??

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

СообщениеДобавлено: 20 сен 2017, 22:34
jigsawjigsaw
Спасибо за ответы. Я понял Ошибку. Просто на руке был Элемент Rigidbody2d. Если его убрать то положение руки не меняется