obsidian/笔记文件/2.笔记/Unity 组件SetParent和worldPositionStay.md
2025-03-26 00:02:56 +08:00

1.3 KiB
Raw Permalink Blame History

#unity/日常积累

需求:

场景中有2个物体A和B需要将B的父级设为A然后确保B的Rotation为x,y,z

按照如下步骤:

1 B.SetParentA;

2B.eulerAngles = new Vector(x,y,z);

然后我们点击场景中的B会发现B的Rotation的数值其实并不是x,y,z这是什么原因呢

第1步设置父级其实还有一个参数worldPositionStay不设置的话默认为ture。这个参数的意思是

true让B在改变父级后旋转不变那么因为设置了父级假设父级旋转不为0,0,0所以为了保证B的旋转不发生变化那么程序会为B设置换算之后的新旋转值如果你把B拖动到A级之外就可以发现B的旋转值并没有发生变化。

false让B的旋转值保持不变也就是不论B在A之外或者在A之下B的Rotation数值不变这样的话如果A有旋转则B在设置A为父级后会发生相应旋转变化。

综上简单的说

worldPositionStay为true就是保证B的旋转不改变但是Rotation数值可能会变化。

worldPositionStay为false就是保证B的Rotation数值不变但是可能会有旋转变化。

所以为了达到需求目的,代码应该这样写

B.eulerAngles = new Vector(x,y,z);

B.SetParentAfalse;

或者

B.SetParentA;

B.localEulerAngles = new Vector(x,y,z);