dotween官网
先验知识:Unity3d-Coroutines协程
Unity3d-C#扩展方法
dotween
在我的理解,dotween是一个扩展方法库,帮我们扩展了transform的方法,使得我们能够通过如transform.DoMove(vec3,time)
这样简单的函数调用,实现在time时间内移动到vec3位置的动画效果。这次的仿写简单dotween本质上是使用了扩展方法和协程来实现。
这次实现的功能是dotween对象的管理以及使用dotween管理pause,play和kill对应动作,实现回调。dotween和动作对应的协程是一一对应的关系。
dotween对象
dotween对象对应的是对应动作的协程。通过改变成员变量中的isPause和autoKill可以决定对应的协程是否停止,dotween对象是否在执行完之后自动销毁。在扩展方法中,每次调用transform的扩展方法,就会产生一个对应的dotween,和一个协程。dotween在构造的时候会自动添加到Dotween工厂的列表中管理。
Dotween工厂
Dotween工厂的作用是管理所有的dotween,将他们保存在列表中,可以通过工厂让同一名字的动作一起暂停,播放,销毁。又或者让一个对象的所有动作停止,播放,销毁。
扩展方法
有了dotween和Dotween来管理我们的动作后,我们可以编写对应的扩展函数库了。
这就成功扩展了一个DoMove函数,要扩展更多的函数,只要记得同样的步骤(创建dotween对象,创建协程,给dotween设置协程,在协程中确认状态,调用回调函数)就可以写出更多的扩展方法。例如扩展一个DoScale:
使用
完成了扩展之后,我们就可以在我们的脚本中调用对应的扩展函数,轻松实现运动效果。
效果:
完整的Dotween.cs代码: