Повернуть GameObject в направлении Line - PullRequest
0 голосов
/ 02 марта 2019

Цель: Учитывая два трехмерных вектора, поверните прямоугольник, который появляется между обоими векторами Vector3.Lerp(A, B, 0.5f), чтобы он выровнялся по линии, определенной вершинами.Сам «ящик» в основном представляет собой 2D-Canvas GameObject (т.е. Sprite), но он порождается в трехмерном мире.

Пожалуйста, также обратитесь к изображениям ниже.

Rotation of GameObject towards Line

Имейте в виду, что это проблема 3D, поэтому все это происходит, например, на поверхности куба.

3D Rotation of GameObject

Одна идея заключалась в том, чтобы каким-то образом взять перекрестный вектор двух вершин и выровнять его с помощью RectTransform.rotation, используя Quaternion.LookRotation () или Quaternion.RotateTowards-метод, но так как я довольно новичок во всем этом, я буду признателен за любую подсказку.

1 Ответ

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

Вы хотите выровнять ось X холста по направлению (B - A).

Математически существует бесконечное количество способов выровнять только одну ось с заданным направлением, поэтому вам нужно указатьвторое правило выравнивания (обычно это вектор UP).

Документация Quaternion.LookRotation гласит:

Ось Z (повернутого объекта) будетвыровнен по прямой, ось X (повернутого объекта) выровнена по перекрестному произведению между вперед и вверх, а ось Y (повернутого объекта) выровнена по перекрестному произведению между Z и X.

Изс точки зрения холста (при правильной ориентации) ось Z направлена ​​к центру куба, поэтому ...

// This is the direction from the Box to the center of the cube
Vector3 boxToCube = Vector3.Cross(B - A, Vector3.up);
// So this should be the correct orientation of the Canvas
Quaternion orientation = Quaternion.LookRotation(boxToCube, Vector3.up);
...