如何复制父对象的旋转保持自旋转,因为它在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中的主要内容,如果未能解决你的问题,请参考以下文章