这跟 tween 没有关系。
是 testUi 这个 prefab 的根节点配置的 cc.Widget 有问题。不应该配置成拉伸全屏。
因为配置为拉升全屏后,设置 scale 为 0.1,拉伸的操作会要求 testUi 的节点的 contentSize 保持跟父节点一致,那么引擎底层会做 width / 0.1 的操作,即将 testUi 的节点 contentSize 放大 10 倍来配合其 contentSize 始终保持跟父节点的大小一致。
我假定你只是想做一个 testUi prefab 节点的从小到大的放大操作。可以配置其 widget 居中对齐,然后初始化 testUi component 的时候,手动设置其 contentSize 为其父节点的大小。
import { _decorator, Component, find, Node, tween, UITransform, v3 } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('testUi')
export class testUi extends Component {
openAnim():void{
const block = this.node;
const uiTransform = this.node.getComponent(UITransform);
uiTransform.contentSize = find('Canvas').getComponent(UITransform).contentSize;
block.scale = v3(0.1, 0.1, 0.1);
console.log('before tween size==>',block.getComponent(UITransform).contentSize)
tween(block).to(1,{scale:v3(1,1,1)}, {
onUpdate: (target, ratio) => {
console.log('tween size==>',block.getComponent(UITransform).contentSize)
},
}).call(()=>{
console.log('after tween size==>',block.getComponent(UITransform).contentSize)
}).start();
}
}
修改后的工程:
TestTweenScale-fixed.zip (33.0 KB)