1

我正在尝试使用旋转矩阵在 Unity 中的 y 轴上实现 transform.Rotate,这可能吗?我写了这个函数但它似乎不起作用,pos是要旋转的对象的位置,theta是角度

public static MyQuaternion Rotate(Vector3 pos, float theta)
 {
         pos = pos.normalized;
         pos -= pos;
         float[,] m = new float[3, 3];

         m[0, 0] = Mathf.Cos(theta); 
         m[0, 1] = 0; 
         m[0, 2] = Mathf.Sin(theta);
         m[1, 0] = 0; 
         m[1, 1] = 1; 
         m[1, 2] = 0;
         m[2, 0] = -Mathf.Sin(theta); 
         m[2, 1] = 0; 
         m[2, 2] = Mathf.Cos(theta);

         Vector3 newPos = new Vector3();
         float temp;

         for (int i = 0; i < 3; ++i)
         {
             temp = 0;
             for (int j = 0; j < 3; ++j)
             {
                 temp += m[i, j] * pos[j];
             }
             newPos[i] = temp;
         }

         newPos += pos;

         return new MyQuaternion(newPos.x, newPos.y, newPos.z, 0);
 }

你有什么主意吗?谢谢

4

1 回答 1

0

如果您想深入了解手动旋转矢量,那么您可以做的很好,但是我不确定您返回的 MyQuaternion 类型。

如果您只想将向量旋转任意角度,您可以使用 Unity 在 Quaternion 类中的构建。Vector3 的乘法被定义为该向量的旋转,因此您可以这样做

Quaternion q=Quaternion.Euler(theta,0,0); // or however you want to map it
Vector3 rotatedVector=q*inputVector;
return rotatedVector;

统一旋转通常通过四元数乘法完成。要将其应用于游戏对象,只需将其变换乘以您要执行的旋转即可。

transform.rotation*=Quaternion.Euler(0,0,theta);

物体的位置在旋转中没有任何作用。

于 2018-12-18T10:39:47.763 回答