Я новичок в Unity и пытаюсь повернуть стрелку, чтобы она указывала на конкретный объект (в моем случае левый треугольник на скриншотах). Я использовал функцию lookRotation(), но не знаю, почему она не работает должным образом. Вот несколько скриншотов. Какие-либо предложения?
public Transform target;
public Transform source;
public GameObject bigArrow;
void Start()
{
}
void Update()
{
Vector3 direction = target.position - source.position;
Quaternion rotation = Quaternion.LookRotation(direction);
source.rotation = rotation;
// ...
}



Как на последнем скриншоте?
@ holo1 В следующий раз, пожалуйста, включите свой код в свой вопрос в виде текста, а не изображения. Наличие вашего кода в виде изображения замедляет ответ на ваш вопрос, поскольку людям приходится повторно вводить ваш код, чтобы включить его в свой ответ, это затрудняет поиск вопроса для людей с похожей проблемой, которые ищут его, и это делает ваш вопрос менее доступен для людей, которые используют программу чтения с экрана.





Продолжая мой комментарий, чтобы ответить на вопрос к нему.
Вы хотите поместить GameObject со стрелкой внутри пустого GameObject, чтобы вы могли сориентировать его в мировых координатах так, чтобы он указывал вперед.
Вот так
Затем вы можете повернуть держатель стрелки с помощью Quaternion.LookRotation, используя его прямое направление в качестве направления взгляда, на которое он указывает.
Если вы не хотите оборачивать стрелку внутри пустого игрового объекта, альтернативное решение — учитывать, в каком направлении указывает стрелка.
Стрелка указывает в локальном направлении Vector3.left. Вы можете сказать, потому что кончик стрелки указывает противоположно локальной красной стрелке оси.
Таким образом, мы можем использовать Quaternion.FromToRotation для создания поворота, который повернет кончик стрелки (указывающий в направлении Vector3.left) в локальное направление Vector3.forward. Затем мы умножаем результат LookRotation на этот модифицирующий поворот, чтобы получить интересующий нас поворот:
void Update()
{
Vector3 direction = target.position - source.position;
Quaternion rotation = Quaternion.LookRotation(direction);
rotation *= Quaternion.FromToRotation(Vector3.left, Vector3.forward);
source.rotation = rotation;
// ...
}
Я предпочитаю ваш ответ, но для новичка я думаю, что мой ответ легче уложить в голове.
Вам нужно правильно установить начальное направление стрелок вперед в редакторе. Совет: по направлению к оси Z обычно "вперед".