如何动态设置属性的type

但不继承cc.Component的话传实例就不会生效

不继承cc.Component的情况下传实例不会生效,传类会生效
继承cc.Component,传实例和类都会生效

抱歉没看懂,给个完整点的代码?

大佬帮忙看看

@ccclass('xxxx')
export class xxxx {
    aaa: boolean = false;
    @property({
        type: cc.Enum({}),
        visible() {
            if (!this.aaa) {
                this.aaa = true;
                //@ts-ignore //无效的,xxxx没有继承cc.Component所有setClassAttr的第一个参数填this无效,继承cc.Component才能生效
                cc.Class.Attr.setClassAttr(this, 'm_iComponent', 'enumList', cc.Enum.getList({ a: 0, b: 1 }));

                //@ts-ignore //有效的,无论xxxx是否继承cc.Component,setClassAttr的第一个参数填类都有效
                cc.Class.Attr.setClassAttr(xxxx, 'm_iComponent', 'enumList', cc.Enum.getList({ a: 0, b: 1 }));
            }
            return true;
        },
    })
    bbb: number = -1;
}

最后一个参数,应该是 cc.Enum.getList(cc.Enum({ a: 0, b: 1 })),enumDef 等价于原先 type: 定义的值

OK,我试试看

还是不行

    @ccclass('xxxx')
    export class xxxx {
        aaa: boolean = false;
        @property({
        type: cc.Enum({}),
        visible() {
            if (!this.aaa) {
                this.aaa = true;
                //@ts-ignore //无效的,xxxx没有继承cc.Component所有setClassAttr的第一个参数填this无效,继承cc.Component才能生效
                cc.Class.Attr.setClassAttr(this, 'm_iComponent', 'enumList', cc.Enum.getList({ a: 0, b: 1 }));

                //@ts-ignore //无效的,xxxx没有继承cc.Component所有setClassAttr的第一个参数填this无效,继承cc.Component才能生效
                cc.Class.Attr.setClassAttr(this, 'm_iComponent', 'enumList', cc.Enum.getList(cc.Enum({ a: 0, b: 1 })));

                //@ts-ignore //有效的,无论xxxx是否继承cc.Component,setClassAttr的第一个参数填类都有效
                cc.Class.Attr.setClassAttr(xxxx, 'm_iComponent', 'enumList', cc.Enum.getList({ a: 0, b: 1 }));
                
                //@ts-ignore //有效的,无论xxxx是否继承cc.Component,setClassAttr的第一个参数填类都有效
                cc.Class.Attr.setClassAttr(xxxx, 'm_iComponent', 'enumList', cc.Enum.getList(cc.Enum({ a: 0, b: 1 })));
            }
            return true;
        },
    })
    bbb: number = -1;
}

在吗大佬。

抱歉今天事情比较多,晚点帮你看一下

我尝试理解了你的代码,你是希望动态修改数组里面的值的枚举类型。
很可惜,目前编辑器并不支持 dump 内嵌(也就是包在数组里)的类型的单独设置。
因为整个数组是做为一个类型整体显示的,所以类型就是取得整个类。
测试代码:

const { ccclass, property } = cc._decorator;

@ccclass('xxxx')
export class xxxx {
    @property
    aaa: boolean = true;
    @property({
        type: cc.Enum({}),
        visible() {
            if (!this.aaa) {
                this.aaa = true;
                cc.Class.Attr.setClassAttr(this, 'bbb', 'enumList', cc.Enum.getList(cc.Enum({ a: 0, b: 1 })));
            }
            return true;
        },
    })
    bbb: number = -1;
}

@ccclass
class Test extends cc.Component {
    @property({
        type: xxxx
    })
    nestObj: xxxx = null;

    @property
    changeSelfType: boolean = false;
    @property({
        type: cc.Enum({}),
        visible() {
            if (this.changeSelfType) {
                this.changeSelfType = false;
                cc.Class.Attr.setClassAttr(this, 'selfDynamicType', 'enumList', cc.Enum.getList(cc.Enum({ a: 0, b: 1 })));
            }
            return true;
        },
    })
    selfDynamicType: number = -1;
}

后续我们会在新版本优化这部分处理。

好吧,谢谢大佬

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。