使旋转对象与父对象一起旋转

时间:2014-10-26 21:15:43

标签: c# unity3d rotation

我有一个游戏对象,它沿着一个轴来回摆动,这个游戏对象附着在一个围绕一个场景移动的父游戏对象上。但是,当父对象旋转时,子对象不会随之旋转。

我希望这与本地和全球空间有关..但我不知所措......

这是管理扫描的代码。

    // Increment a timer
    timer += Time.deltaTime;

    // Swing the object back and forth based on the rotationLimit and the rotationSpeed
    currentRotation = Mathf.PingPong (timer * rotationSpeed, rotationLimit * 2f) - rotationLimit;

    // Create a temporary variable to store the new rotation
    Quaternion rotation = Quaternion.Euler (transform.rotation.x, transform.rotation.y + currentRotation, transform.rotation.z);

    // Set the rotation to the temp var
    transform.rotation = rotation;

我考虑抓住父级轮换并使用它而不是transform.rotation。但是,理想情况下,这个相同的脚本需要处理各种对象,其中一些对象没有父对象。谁能告诉我哪里出错了。

1 个答案:

答案 0 :(得分:1)

从您的代码中我猜你使用Unity。据我所知,团结支持' SceneGraph'的概念。这允许您构建游戏对象树,其中孩子遵循其父对象的转换。 请看这个链接:http://docs.unity3d.com/ScriptReference/Transform-parent.html

ALTERNATIVE - 如果您想手动执行此操作:

手动组合父/子转换时应该小心。最简单也可能是最好的方法是简单地组合父变换和子变换:

ChildWorldTransform = ChildLocalTransform * ParentWorldTransform

ChildLocalTransform对应于您的currentRotation,ParentWorldTransform对应父对象的转换。请注意,您应该将整个变换整体相乘,而不仅仅是旋转部分!

我还建议您使用google for' scenegraph'