(Tween 综合讨论) 关于 3.8.5 Tween 系统的类型改进

我之所以说这个太 hack,是因为你只考虑到 UITransform 的情况,那么如果其它 N 种组件(引擎内部和用户自己的组件)要怎么办?

之前未考虑到 tween 的某些函数其实是可以读取到 target 的:

tween.to({ b: 0 });

那第一种情况确实其实应该报错,但注意第二种情况也应该要报错,因为现在 tween 对 target 既能读也能写。

            let t1: Tween<Animal> = tween(animal);
            let t2: Tween<Dog> = tween(dog);

            t2 = t1; // Type 'Animal' is not assignable to type 'Dog'.ts(2322)

            t1 = t2; // should error there.

            t1.target(animal); // because animal no 'b' property.

tween 无法级联不同的 target 类型
这个优化也会放到3.8.5里面吗???
尽快解决吧。。。
现在写起来实在是太蛋疼了。。。 :joy:

引擎内部和用户自己的组件,target本来就不应该是node而是组件对象啊
对了,还可以把color也添加成特殊属性字段
这是保持tween和2.x的一致性,不是一个tween支持多target

tween的speed为什么不暴露出来, 大家肯定会有变速的需求

2赞

同意,类似需求真的很多

这个bug的原因我回复在这个帖了:https://forum.cocos.org/t/topic/123065/4
修复 PR: https://github.com/cocos/cocos-engine/pull/16977

在这回复了,计划在 3.8.5 中修复。
3.8.3 已经锁包了,3.8.4 是 openharmony 特供版本,因此只能在 3.8.5 中修复了。

发了个 PR 支持 chain 过程中设置不同的 target

太牛了!还真给解决了!期待新版本!

这个非常非常实用,之前的tween太别扭了 :+1: :+1: :+1:

例如:Switcher开关组件,运行环境点按钮,会播放tween开关动画
编辑器环境下点一下,直接开 or 关,不播动画直接跳到tween的结尾
tween相关的代码不用修改,tween内部针对编辑器环境做处理

请别歪楼,其它问题请另开帖子。

你说的编辑器环境,是指“编辑器内预览”吗?
WeChatf129ec1ae98dea5f5b6267c7326398f0

不是,比如我属性面板设置开 或 关,tween可以让按钮触发左右移动(EDITOR = true,tween不播动画直接跳转到终点)

了解,所以你是希望编辑器模式下,不做缓动过程。

所以现在的行为是:编辑器环境下,也是和运行时一样处理缓动过程?
你期待的行为是:编辑器环境,缓动开始后,直接到终点?

关于之前你回复的:

tween在编辑器环境下调用,希望能直接跳转到终点,这样可以保持代码一致性

能否具体说明一下代码一致性?是说你现在其实是编辑器环境和运行时环境写了两套代码去实现你的需求,如果 tween 内部支持这个功能,你上层就可以用一套代码,是这样理解吗?

另外,编辑器模式下,直接跳转到终点,带来的好处是?

比如我写一个Switcher开关组件,运行环境下改变开关状态能播tween动画
但是编辑器里点属性面板改变开关状态不能播tween动画,既然这样至少让tween直接跳转到终点吧
我这里说的不是选编辑器预览,然后运行
我说的是没点运行,直接修改组件的属性触发了tween的情况

威武!!!!!

尝试理解了好久没有get到这里表述的意思。
你的需求是不是每个节点和属性可以有一个开关,当打开这个开关的时候,运行游戏时,可以跳过缓动过程直接让节点变成缓动动作最终的状态,进而可以缩短验证其他代码逻辑的时间?

比如我改变一个sprite的颜色,或者节点位置,编辑器窗口都能看到
但是我自定义组件通过tween改变节点位置,编辑器里是看不到tween动画过程的,既然这样就直接让他跳到终点吧
注意这里不是说点了运行后看效果,只是属性面板里改属性触发了tween

意思是在编辑器环境下,通过编辑器环境可以运行的组件去对节点进行tween动作,但是现在的表现是编辑器环境下tween动作没有任何效果?
然后期望的结果是:
1.编辑器环境下,通过编辑器环境下可以运行的组件用tween对节点进行缓动,可以像实际运行时一样看到动画效果并能运行到最终状态。
2.如果1短期实现不了,折中一下,希望即使没有缓动过程,也能使节点变成tween动作的最终状态。

不知道这样理解对不对?

1赞