Unity根据其他对象角度旋转对象

问题描述 投票:3回答:1

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

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

使用旋转矩阵尝试数学并没有真正解决,因为它们每帧都被评估,从而使对象2永久旋转。

非常感谢!

enter image description here

c# unity3d rotation gameobject
1个回答
4
投票

假设您只围绕一个单轴旋转(如图中所示),您可以使用例如圆圈2获得旋转差异。 Quaternion.Angle每一帧

private Quaternion lastCircle2Rot;

//...

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

比如使用例如圆圈1转动圆圈1。 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);

因为它默认在本地空间完成。

© www.soinside.com 2019 - 2024. All rights reserved.