如何复制父对象的旋转保持自旋转,因为它在unity3d中

Posted

技术标签:

【中文标题】如何复制父对象的旋转保持自旋转,因为它在unity3d中【英文标题】:How to copy rotation of parent object keeping self rotation as it is in unity3d 【发布时间】:2019-07-15 19:49:49 【问题描述】:

我正在尝试在 3d 平面内实例化一个 3d 平面游戏对象,但是父 3d 平面的旋转可以是任何东西,子平面应该与父 3d 平面完全平行,但它也应该保持自己的旋转。

我尝试了以下脚本,但没有成功

child.rotation = child.rotation * parent.rotation;

这里我有一个子平面游戏对象名称为 B(旋转:-90、0、0),我正在制作另一个更大的平面游戏对象(旋转:任何东西)作为其父级。但是子平面有时会平行于其父平面,有时当父平面处于某个不同的角度/旋转时则不会。

说明: 在下面的屏幕截图中,我在编辑器中手动设置了子平面旋转,只需将所需角度旋转 90/180 度,当将该对象从世界拖动到子对象(本地)时,比例会自动调整。

我尝试了下面的代码 sn-ps 来实现所需,但没有奏效。

var chile = Instantiate(Resources.Load<GameObject>(prefabsPath), parent);
var t = child.transform;
t.position = pos;
t.rotation = parent.rotation;

我也试过了

t.forward = parent.forward;

还有这个

child.SetParent(parent); // wasn't passing parent in Instantiate

上面一个在相应的缩放方面工作得很好,但我仍然无法修复旋转。

@derHego 回答, 子飞机像下面一样被拉伸, 我尝试将孩子附加到不同大小的父平面上,我发现它会根据其父级比例进行拉伸,如果父级的 y 大于 x,则子级的 y 也比其 x 大,比例与父级相同。 我该如何解决这个问题?

【问题讨论】:

be exact parallel to the parent 3d plane but it should keep its own rotation also 你到底是什么意思?你的意思是它们都应该指向同一个方向? @derHugo 我已经更新了问题,请看一下。谢谢 但现在我看到即使在同一个父平面上,孩子们也有不同的旋转和不同的比例,奇怪!但是它们的向上角度是相同的,这解决了我的基本问题。 【参考方案1】:

我假设您希望两个平面都面对例如它们的本地Y 轴在同一方向上,而它们仍可能围绕该面法线相互旋转。

根据您的飞机所面对的方向,您可以使用例如

child.up = parent.up;

在这种情况下,为了使两个平面平行(= 指向同一个方向),我假设您的默认平面平放在地板上,因此它朝上 Y 方向


例如

public class Example : MonoBehaviour

    public Transform child;

    private void Start()
    
        child.up = transform.up;
    

(绿色平面为父,白色平面为子)


在你更新之后,看起来实际上你可以简单地做

var child = Instantiate(prefab);

child.rotation = parent.rotation;

var scale = child.lossyScale;
child.SetParent(parent);

var invertParentScale = new Vector3(1 / parent.lossyScale.x, 1 / parent.lossyScale.y, 1 / parent.lossyScale.z)
child.localScale = Vector3.Scale(scale, invertParentScale);

【讨论】:

您好,谢谢,旋转已修复,但自动缩放无法正常工作,子平面被拉伸。我附上了有问题的截图,请看一下。谢谢 我尝试将孩子附加到不同大小的父平面上,我发现它会根据其父级比例进行拉伸,如果父级的 y 大于 x,那么子级的 y 也比它的 x 更大与父母的比例。

以上是关于如何复制父对象的旋转保持自旋转,因为它在unity3d中的主要内容,如果未能解决你的问题,请参考以下文章

Unity - 使用 foreach 循环以及父对象和子对象进行 Lerp 旋转?

Unity3d怎么获得孙物体相对于父物体的旋转坐标

iOS5 自定义窗口旋转问题

基于Three.js中的父/其他对象坐标系保持对象旋转?

如何旋转对象沿着矢量Unity3D指向

fabric.js - 基于父级旋转“子”对象,不带分组