关于Dotween旋转以及OnValidate函数的解读

在DoTween中可以选择do旋转。但是旋转模式分成四种,且又有DoLocalRotate和DoRotate的区别,所以在此记录一下。

DoLocalRotate和DoRotate的区别在于,前者是基于自身当前旋转度数的旋转,如果游戏物体是UI,或者是某个物体的子物体,LocalRotation与Rotation的区别比较明显(尝试把父物体旋转一些度数,可以看出区别)。而后者的旋转是基于世界坐标系,测试方法和上述一样。

DoTween有四种旋转模式,分别是

1.RotateMode.LocalAxisAdd:先从字面分析,local和上述讲的是一样的,基于自身当前旋转度数(localrotation)。add,是指在当前旋转度数的基础上增加endvalue的值。

2.RotateMode.WorldAxisAdd:直接分析world,是指相对于世界的旋转,若endvalue的值是(0,0,10),意思是以世界的z轴为方向,增加10度的旋转量。

3.RotateMode.Fast:DoTween中旋转的默认模式,若无显示的指明旋转模式,那么此模式为当前旋转模式。但是使用此方法旋转,每次到了360就归0了,可以直接将endvalue设置为370试试,物体只会旋转10度。

4.RotateMode.FastBeyond360:超越360度,字面意思即可理解。同样设置370度,物体真的会从当前的度数,旋转到370度,且不会归零。

DOPunchRotation这个方法能实现非常有趣的动画效果,使用此方法,物体会以给定的punch值摇摆,最终会回到原始的旋转度数。

 

OnValidate方法,是之前看见我主程在用,所以我尝试了一下,并未深入研究,直到上次主程又训了我一顿,今晚仔细测试了一遍。

Validate字面意思是生效,所以此方法会在脚本生效的时候调用,此外,也会在Inspector面板中修改此脚本的值时调用。之前对于此方法的误解在于,我以为这个方法会一直调用,例如我在OnEnable中对同样一个游戏物体修改了名字,但是OnValidate中也修改了名字。我以为OnValidate也会在游戏刚运行时调用,但事实不是。

OnValidate的运用场景十分丰富,对于目前的我来说,是非常有用的。例如上述fast旋转时,我们也可以使用OnValidate实现此效果。直接rotation=rotation%360即可(忽略四元数等转换)。倘若我们需要为一个游戏物体下所有子物体按照顺序,从0开始排序,可以直接使用for循环,获取transform.count,然后transform.getchild(0).name=i即可。OnValidate使用场景数不胜数,就不再赘述了。

posted @ 2021-06-14 22:30  军酱不是酱  阅读(2714)  评论(0编辑  收藏  举报