做了一个组件会引用动画组件的具体动画名
/**
* @zh
* UI动画
*/
@property(cc.Animation)
_uiAnimation:cc.Animation = null;
@property({
type : cc.Animation,
tooltip : 'UI动画组件'
})
get uiAnimation(){
return this._uiAnimation;
}
set uiAnimation(value:cc.Animation){
if(this._uiAnimation != value){
this._uiAnimation = value;
this.updateUIAnimation();
}
}
/**
* @zh
* 更新UI动画
*/
private updateUIAnimation(){
if(CC_EDITOR){
if(this._uiAnimation){
let enumMap:{[key:string]:number} = {
'<None>' : 0
};
this._uiAnimation.getClips().forEach((v,i)=>{ enumMap[v.name] = i + 1; });
// @ts-ignore
cc.Class.Attr.setClassAttr(this, 'openAnimation', 'enumList', cc.Enum.getList(enumMap));
// @ts-ignore
cc.Class.Attr.setClassAttr(this, 'closeAnimation', 'enumList', cc.Enum.getList(enumMap));
}else{
// @ts-ignore
cc.Class.Attr.setClassAttr(this, 'openAnimation', 'enumList', cc.Enum.getList(cc.Enum(TempAnimeName)));
// @ts-ignore
cc.Class.Attr.setClassAttr(this, 'closeAnimation', 'enumList', cc.Enum.getList(cc.Enum(TempAnimeName)));
}
if(this.node){
Editor.Utils.refreshSelectedInspector('node', this.node.uuid);
}
}
}
实现是正常的

但是,如果在编辑器中切换场景后,使用cc.Class.Attr.setClassAttr修改的属性就失效了

应该是切换场景后,需要再次执行updateUIAnimation才行,但是好像没有找到具体方法。
有大佬遇到过这个问题吗