Поворот в сторону, не поворачивая преобразование.вперед

#unity3d

#unity3d

Вопрос:

У меня есть два объекта, хищник и жертва. Я пытаюсь написать код так, чтобы, когда хищник видел добычу, он поворачивался в ее направлении и двигался вперед (в том же направлении).

 Vector3.RotateTowards (transform.forward, preyPos, Mathf.Infinity, Mathf.Infinity);
transform.Translate (transform.forward * predatorSpeed);
  

Я понимаю, что приведенный выше код должен вращать transform.forward, однако это один и тот же вектор как до, так и после этой строки. Почему это происходит? Я перепробовал много вещей, но я не могу заставить это работать.

Ответ №1:

Поскольку Vector3 в Unity является struct (типом значения), таким образом, всегда передается по значению.

 Vector3 v = Vector3.zero;
ChangeValue(v); // Change value of v.x, v.y, v.z
Debug.Log(v); // still (0, 0, 0);
  

Тем не менее, Vector3.RotateTowards() должен возвращать Vector3 . В принципе, вам нужно:

 transform.forward = Vector3.RotateTowards (transform.forward, preyPos, Mathf.Infinity, Mathf.Infinity);
  

Но я не уверен, что это сработает, потому transform.forward что является неизменяемым.
https://docs.unity3d.com/ScriptReference/Vector3.RotateTowards.html

Если вы хотите, чтобы поворот был направлен на цель, рассмотрите 1 из этих вариантов:

Преобразование.LookAt();
Кватернион.RotateTowards();
Кватернион — это тоже a struct , поэтому, пожалуйста, внимательно прочитайте документацию.

Комментарии:

1. Я пробовал использовать RotateTowards, но это не работает. Преобразование. LookAt() оказался тем, что мне было нужно. Спасибо!!