我有一个游戏对象,它沿着一个轴来回摆动,这个游戏对象附着在一个围绕一个场景移动的父游戏对象上。但是,当父对象旋转时,子对象不会随之旋转。
我希望这与本地和全球空间有关..但我不知所措......
这是管理扫描的代码。
// 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。但是,理想情况下,这个相同的脚本需要处理各种对象,其中一些对象没有父对象。谁能告诉我哪里出错了。
答案 0 :(得分:1)
从您的代码中我猜你使用Unity。据我所知,团结支持' SceneGraph'的概念。这允许您构建游戏对象树,其中孩子遵循其父对象的转换。 请看这个链接:http://docs.unity3d.com/ScriptReference/Transform-parent.html
ALTERNATIVE - 如果您想手动执行此操作:
手动组合父/子转换时应该小心。最简单也可能是最好的方法是简单地组合父变换和子变换:
ChildWorldTransform = ChildLocalTransform * ParentWorldTransform
ChildLocalTransform对应于您的currentRotation,ParentWorldTransform对应父对象的转换。请注意,您应该将整个变换整体相乘,而不仅仅是旋转部分!
我还建议您使用google for' scenegraph'