根据其他物体的角度统一旋转物体

时间:2019-03-13 13:42:09

标签: c# unity3d rotation gameobject

我有两个游戏对象。基本问题: “当我旋转圆1时,我想以因子x操纵的相同方式旋转圆2”。

如何将围绕圆2的每个局部轴的旋转与圆1的可交互旋转同步,并以系数x缩放该旋转?设置transform.right等于不起作用,仍然有很多自由度。 (Local Axis,因为我希望一个或两个游戏对象也都倾斜,但彼此不相关。)

尝试使用旋转矩阵进行数学运算并不能真正得出结论,因为旋转矩阵在每一帧都会被评估,从而使对象2永续旋转。

非常感谢!

enter image description here

1 个答案:

答案 0 :(得分:4)

假设仅绕一个轴旋转(如图所示),您可以使用例如Quaternion.Angle每帧

private Quaternion lastCircle2Rot;

//...

float rotDelta = Quaternion.Angle(lastCircle2Rot, circle2.transform.rotation);
lastCircle2Rot = circle2.transform.rotation;

而不是使用例如Transform.RotateAround

public float multiplier;

// e.g. rotate around local x = right
Vector3 YourAxis = circle1.transform.right;
circle1.transform.RotateAround(Vector3.zero, YourAxis, rotDelta * multiplier);

如果使用例如正确的或另一个“干净的”向量,您也可以简单地使用

circle1.transform.Rotate(Vector3.right, rotDelta * multiplier);

默认情况下是在本地空间完成的。