Объект не действует соответственно при движении - PullRequest
0 голосов
/ 28 ноября 2018

Я работаю над этой игрой с танками, в которой вы перемещаете танк с помощью ввода с клавиатуры и наводите его башню с помощью мыши.

Для перемещения танка я использую этот код в методе обновления:

x = Input.GetAxis("Horizontal") * Time.deltaTime * rotationSpeed;
z = Input.GetAxis("Vertical") * Time.deltaTime * speed;

transform.Rotate(0, x, 0);
transform.Translate(0, 0, z);

Но я получаю результаты, похожие на это видео (даже при блокировке вращения осей): https://streamable.com/tm33b

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

Я новичок в единстве, извините, если мои вопросы были очевидны или просты.Я буду очень благодарен, если получу какое-либо прямое решение этого вопроса.

1 Ответ

0 голосов
/ 29 ноября 2018

Обратите внимание, что оба значения Translate и Rotate имеют последний необязательный параметр Space relativeTo = Space.Self.Это означает, что по умолчанию всегда используется Space.Self:

Если относительный опущен или установлен на Space.Self, движение применяется относительно локальных осей преобразования.(Оси x, y и z показаны при выборе объекта в Scene View.) Если lativeTo равно Space.World, движение применяется относительно мировой системы координат.

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

transform.Rotate(0, x, 0, Space.World);
transform.Translate(0, 0, z, Space.World);

для выполнения перевода и вращения в рабочем пространстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...