FishPlayer

一个喜欢摸鱼的废物

0%

给PrimeTween新增小小的异步代码支持

最近做的新项目没有使用 DOTween 了,转而使用性能比较高的 PrimeTween。这是一个比较新的插件,看了下大概是前两年上架的。
比起历史悠久的 DOTween 相比, PrimeTween 虽然性能很高,但是不像 DOTween 有丰富的特性以及一些额外的其它插件的联动支持。

具体的就说 UniTask 吧,他有一个专门的拓展类给予 DOTwee 异步相关的支持。这里面有我现在马上就需要用到的 “使用 CancellationToken 取消对 Tween 的异步等待” 的功能。

PrimeTween 没有这个支持,没关系,我只要照着这个拓展类抄一个就好,虽然这俩Tween的实现不太一样,但是核心的行为还是非常相似的。

思路

稍微点F12跳两下就发现,其实这个功能的实现思路就是通过方法 CancellationToken.Register 去给C ancellationToken 收到取消请求的时机注册一个回调。在这个回调中去处理关于Tween的各种处理。

DOTween 的拓展处理中会把原本 Tween 的正常播放完成相关回调拿出来然后缓存在自己的结构中并换上自己的响应动画的正常完成。PrimeTween 和 DOTween 不一样的地方在于 PrimeTween 的回调不能重复绑定,所以照着抄的时候为了保证代码的一致性,我选择用 PrimeTween 插件中的 Sequence 把原本的 Tween/Sequence 包装起来,似乎这个应该是他插件本身就推荐的做法。当然包起来以后就不可以再编辑原 Tween 的一些参数了。

PrimeTween 高性能的原因似乎是他把实际执行 Tween 行为的实例都用对象池管理起来了,不像 DOTween 需要用户自己管理动画实例对象。而且 DOTween 的用于存放相关动画参数的数据结构 TweenSetting 好像也是类,这点其实让我有点讨厌。

代码

src