Unity 组件SetParent和worldPositionStay

需求:

场景中有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);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值