#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() оказался тем, что мне было нужно. Спасибо!!