#c# #unity3d
Вопрос:
Я создаю игру Unity, в которой вы можете использовать свое воображение, чтобы вызывать вещи. Первое, что вы получаете, — это пушка, но у меня возникают проблемы с тем, чтобы пушка смотрела туда, куда смотрит игрок. Мне просто нужно изменить вращение z, чтобы соответствовать игрокам, но по какой-то причине, когда я это делаю, вращение x меняется на 180. Вот мой код
if (Input.GetKeyDown("k"))
{
Vector3 playerPos = transform.position;
Vector3 playerDirection = transform.forward;
Quaternion playerRotation = transform.rotation;
float spawnDistance = 10;
smoke.transform.position = playerPos playerDirection * spawnDistance;
smoke.Play();
StartCoroutine(SpawnCannon(1));
IEnumerator SpawnCannon(float waitTime)
{
yield return new WaitForSeconds(waitTime);
cannon.transform.position = smoke.transform.position;
cannon.transform.rotation = new Quaternion(-90,0,playerDirection.z,0);
}
}
Комментарии:
1. а)
Quaternion
!= углы Эйлера … четыре компонентаQuaternion
перемещения между-1
и1
и не могут быть просто использованы как углы Эйлера … так что, вероятно, это должно бытьcannon.transform.rotation = Quaternion.Euler(-90,0,playerDirection.z);
… НО б)transform.forward
возвращает нормализованноеVector3
направление , которое не является вращением … и в) то, что вы видите в Инспекторе, — это локальное вращение относительно родительского элемента в представлении Эйлера .. что говорит противcannon.transform.rotation = transform.rotation;
?2. Спасибо, что объяснили это. Теперь я думаю, что смогу решить эту проблему самостоятельно.
Ответ №1:
есть ли у пушки жесткое тело? Если это произойдет, то заморозьте вращение канона по оси x. Но если у него нет твердого тела, добавьте его и заморозьте вращение canon по оси x. и эта строка кода здесь: Quaternion playerRotation = transform.rotation;
, вы можете заменить ее следующим : Quaternion playerRotation = transform.rotation.[AXIS HERE];
. Замените [ОСЬ ЗДЕСЬ] осью, по которой вы хотите, чтобы canon вращался, если вы хотите, чтобы canon вращался по оси z, вы бы заменили [ОСЬ ЗДЕСЬ] на z. Надеюсь, это немного поможет! 😀
Комментарии:
1. Это разумный способ сделать это. Но вместо этого я просто установил вектор движения пушек на вектор движения игроков.