存储子级相对于其父级的旋转在Unity3d中无法正常工作

问题描述 投票:0回答:2

我正在尝试存储儿童游戏对象的相对旋转,以便我可以在需要时计算他们的世界旋转,因为我正在删除那些因为没有用,因为我将旋转从他们的前锋存储到父母的前锋,但它没有似乎工作。

// store relative rotation
var rot = Quaternion.FromToRotation(child.forward, parent.forward);

// get world rotation
var childWorldRot = parent.rotation * rot;
c# unity3d quaternions
2个回答
1
投票

也许有一个更好的解决方案涉及四元数转换,但这很简单,应该这样做:

// store relative directions
var refUp = parent.InverseTransformDirection(child.up);
var refForward = parent.InverseTransformDirection(child.forward);

// get world rotation
var childWorldRot = Quaternion.LookRotation(parent.TransformDirection(refForward), parent.TransformDirection(refUp));

0
投票

只需使用Transform.localRotation。它与父母有关。 我不确定我是否完全理解你的最终目标是什么,但请记住,Transform.rotation已经在世界空间。

// store relative rotation
var rot = child.localRotation;

// get world rotation
var childWorldRot = child.rotation;
© www.soinside.com 2019 - 2024. All rights reserved.