Как я могу отразить движение игрового объекта в Unity? - PullRequest
2 голосов
/ 09 марта 2019

У меня есть два игровых объекта, и я хочу, чтобы они были расположены на заднице так же, как на картинке, но я хочу, чтобы они двигались и вращались вместе, чтобы они всегда были расположены таким образом.Я контролирую черный объект, поэтому я просто использовал transform.rotation = Quaternion.Euler(0, 0, player.transform.eulerAngles.z + 180);, чтобы получить правильное вращение, но я просто не могу определить правильную позицию.Вот эскиз того, как я хочу, чтобы они были размещены. Visual explanation of the positions

При перемещении моего черного объекта в направлении два игровых объекта не остаются прикрепленными.Вот описание проблемы. Problem

Вот мой точный сценарий и фотография: сценарий, который я использую для перемещения ai:

transform.position = player.transform.position + new Vector3(0, player.transform.localScale.y + transform.localScale.y - 1, 0); transform.rotation = Quaternion.Euler(0, 0, player.transform.eulerAngles.z + 180); transform.parent = player.transform;

И точное фото в Инспекторе: enter image description here

И вот как я хочу, чтобы они всегда были размещены: https://bugguide.net/images/cache/SL2/ZZL/SL2ZZLPZMLOH6HHRUHRREHVH7HVHZLWZLL6Z7H6Z8H5Z7HEZ5LEZ5H8ZSLAHRL2Z4LBZ7LAZILAZXLGZKL2ZMHAHMH.jpg

[ОБНОВЛЕНИЕ] Я использовал ответ @Ali Kanat, и я уже на полпути: Update Как вы можете видеть на картинке, две ошибки теперь одна над другой, но они движутсявместе, как они должны.

1 Ответ

0 голосов
/ 09 марта 2019

Вы можете просто сделать красный объект (или любые другие имеющиеся у вас объекты) дочерними по отношению к черному объекту и вращать черный объект.Таким образом, вы можете сохранить геометрию, и вам не придется изменять transform компонент других объектов.

После комментариев я предполагаю, что большая ошибка леди - Player.Достичь того, чего вы хотите программно, можно следующим образом:

//forward, up or right depends on which direction is the front of your player
transform.position = player.transform.position + ((-player.transform.forward) * (player.transform.localScale.y
        + transform.localScale.y)/2);
transform.forward = (-player.transform.forward);

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

...