关于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 @   军酱不是酱  阅读(3498)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示