怎么动态修改property的枚举选项?

@property({
type:cc.Enum({})
})
比如这样的一个属性, 怎么用代码动态修改具体的枚举值
好像js有 cc.Class.Attr.setClassAttr(ShaderHelper, ‘program’, ‘enumList’, array); 这种方式
就是不知道ts 该怎么写

cc.Class.Attr.setClassAttr(ShaderHelper, ‘program’, ‘enumList’, array); 支持ts啊

好的,我试试

哎,不对,我要的是可以动态修改的列表选择器, 但是这个好像并不能随时修改的样子, 而且好像是和类绑定的,不是单独的实例

可以的,这个array你自己赋值变化啊

不知道怎么回事, 第一次可以修改后面就没效果了, 打印起来是执行到那里了的

抱歉,挖坟下。我也遇到这个问题,你这个动态修改属性,和类绑定的问题有处理方法了吗?

问题解决了吗,我也被这个问题卡住了

我这里有个示例,你可以看看你的怎么修改

/**
	 * @zh
	 * 更新动画枚举
	 */
    private updateAnimationEnum(){
        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(TempAnimtionEnum)));
                // @ts-ignore
                cc.Class.Attr.setClassAttr(this, 'closeAnimation', 'enumList', cc.Enum.getList(cc.Enum(TempAnimtionEnum)));
            }
            if(this.node){
                Editor.Utils.refreshSelectedInspector('node', this.node.uuid);
            }
        }
    }

如何在不继承component的情况下动态修改对象实例的属性的type

因为这个类继承了component就不能成为其它类的属性的type了

类似这样
image

cc.class 的类应该都可以, 不一定要继承 component

但不继承component就会跟类绑定,改一个其它所有的实例都会变了

就是不能 cc.Class.Attr.setClassAttr(this, ‘closeAnimation’, ‘enumList’, cc.Enum.getList(cc.Enum(TempAnimtionEnum)));
只能 cc.Class.Attr.setClassAttr(Animation, ‘closeAnimation’, ‘enumList’, cc.Enum.getList(cc.Enum(TempAnimtionEnum)))

其他使用方式只有自己研究下了, 可能需要自定义 inspector吧

那你当时是怎么处理的呀

我的, 上面那个写法已经满足要求了

好吧,谢谢