Смещенный от центра объект поворота в Unity - PullRequest
0 голосов
/ 13 января 2019

У меня есть лазерная турель в Unity3D, которую я хотел бы повернуть навстречу врагам. Башня состоит из «ноги» и «головы» (выделено на картинке 1 ). Голова может поворачиваться и наклоняться вокруг сферического сустава.

Я делаю следующее:

    Vector3 targetDir = collision.gameObject.transform.position - turretHead.transform.position;
    float step = turnSpeed * Time.deltaTime;
    Vector3 newDir = Vector3.RotateTowards(turretHead.transform.forward, targetDir, step, 0.0f);
    turretHead.transform.rotation = Quaternion.LookRotation(newDir);

Проблема в том, что, поскольку шарнир головки не выровнен с лазерным лучом, турель поворачивается почти в правильном направлении, но стреляет выше цели. (Если бы лазер выходил за красную ось оси, он попадал бы идеально.)

Есть ли встроенный метод или какой-то трюк для достижения правильной функциональности, кроме выполнения собственных вычислений?

Turret

1 Ответ

0 голосов
/ 13 января 2019

Хорошо, вот быстрый и простой способ сделать это. Вероятно, "лучше" сделать это с правильным триггером, но это должно дать вам результат, который вы хотите довольно быстро:

Если у вас еще нет преобразования, выровненного по стволу, создайте пустой GameObject и выровняйте его (убедитесь, что это дочерний элемент турели, чтобы они двигались вместе). Добавьте ссылку на ваш скрипт для его преобразования.

Затем, в вашей первой строке, рассчитайте по новому преобразованию Барреля вместо преобразования turretHead. Оставь все остальное таким же. Таким образом, он рассчитывает от ствола башни, но перемещает головку башни.

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

...