向线旋转GameObject

时间:2019-03-01 21:27:27

标签: unity3d 3d rotation quaternions

目标:给定两个3D向量,旋转一个方框,该方框将在两个向量Vector3.Lerp(A, B, 0.5f)之间生成,以使其与顶点定义的线对齐。 “盒子”本身基本上是一个 2D画布游戏对象(即Sprite),但它是在3D世界中生成的。

也请参考以下图像。

Rotation of GameObject towards Line

请记住,这是一个3D问题,因此所有此类情况都会发生,例如在立方体的表面上。

3D Rotation of GameObject

一个想法是以某种方式获取两个顶点的交叉向量,并使用Quaternion.LookRotation()或Quaternion.RotateTowards方法将RectTransform.rotation与其对齐,但是由于我对所有这将不胜感激。

1 个答案:

答案 0 :(得分:1)

您要使Canvas的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);