需求:
场景中有2个物体A和B,需要将B的父级设为A,然后确保B的Rotation为(x,y,z)。
按照如下步骤:
1, B.SetParent(A);
2,B.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.SetParent(A,false);
或者
B.SetParent(A);
B.localEulerAngles = new Vector(x,y,z);