准备工作
建三个 Cube,并设置好父子关系,先把三个物体的旋转都归零。
层级结构
场景视图
让物体绕自己的某一个轴旋转
代码如下:
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
public Transform childCube1;
public Transform childCube2;
void Update()
{
Quaternion rotU = Quaternion.AngleAxis(100 * Time.deltaTime, Vector3.up);
childCube1.transform.rotation = childCube1.transform.rotation * rotU;
childCube2.transform.localRotation = childCube2.transform.localRotation * rotU;
}
}
还是保持三个 Cube 旋转都为 0,可以看到两个子物体是绕着自己的 up 轴旋转的。
旋转都为 0 的时候
将两个子物体的旋转的 x 轴改为 45,可以看到两个子物体是绕着自己的 up 轴旋转的。
子物体 x 轴旋转为 45
将父物体的旋转 x 轴也改成 45,可以看到两个子物体还是绕着自己的 up 轴旋转的。
父物体、子物体的 x 轴都是 45
让物体绕世界坐标轴旋转
还是保持三个 Cube 旋转都为 0,可以看到子物体是绕着世界 up 轴旋转的。
旋转都为 0 的时候
将子物体的旋转的 x 轴改为 45,并把显示的坐标轴从 Local 变成 Global,可以看到子物体依然绕着世界 up 轴旋转。
子物体 x 轴旋转为 45
将父物体的旋转 x 轴也改成 45,可以看到子物体依然绕着世界 up 轴旋转。
父物体、子物体的 x 轴都是 45
让物体绕父物体某一个轴旋转
代码如下:
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
public Transform childCube1;
void Update()
{
Quaternion rotU = Quaternion.AngleAxis(200 * Time.deltaTime, Vector3.up);
childCube1.transform.localRotation = rotU * childCube1.transform.localRotation;
}
}
将父物体的 x 轴旋转设置为 90,将子物体的 x 轴旋转设置为 -90,可以看到子物体是按照父物体的 up 轴进行旋转的。
父物体的 x 轴旋转设置为 90,子物体的 x 轴旋转设置为 -90
总结
所有的旋转都是顺时针的。
参考