发现一个cocos creator 3.7.x的问题,enum设置在property时enum对象的值不允许是字符串,用户自行创建的enum是字符串不给设置在编辑器中使用。

  • Creator 版本: 3.7.2

  • 目标平台:

  • 重现方式:

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率:

//这种代码在编辑器中什么都不显示,一个空白的下拉选框。

export enum EDITOR_BIND_TYPE {

    BIND_TYPE_STR = "1",

    BIND_TYPE_NUMBER="b",

    BIND_TYPE_OBJECT ="c",

    BIND_TYPE_UNKNOWN ="d",

    BIND_TYPE_LIST="e"

}

@property(Enum(EDITOR_BIND_TYPE))

不支持 TS 的 enum 喔

那为什么在代码注释上又说支持?
image

试试ccenum转一下

ts 的 enum 赋值时不要分配任何除了数字以外的初始值,就直接

export enum EDITOR_BIND_TYPE {
    BIND_TYPE_STR,
    BIND_TYPE_NUMBER,
    BIND_TYPE_OBJECT,
    BIND_TYPE_UNKNOWN,
    BIND_TYPE_LIST
}

所以说这就是BUG。不支持string就是bug。哈哈哈

哈哈,我设计 CCEnum 时,TS 都还没 1.0 呢,应该是 TS 的 bug

:unamused: :sweat_smile:

大佬啥时候修改一下嘛 :crazy_face:

…测试了好几次,各种骚操作都用了也显示不对,原来是不支持ts。刚从unity转过来的不太想写js啊,希望能尽早支持ts 。:sob:

合并这个补丁后再试试:https://github.com/cocos/cocos-engine/pull/16875

export enum EDITOR_BIND_TYPE {

    BIND_TYPE_STR = "1",

    BIND_TYPE_NUMBER="b",

    BIND_TYPE_VALUE_NUMBER = 1234,

    BIND_TYPE_OBJECT ="c",

    BIND_TYPE_UNKNOWN ="d",

    BIND_TYPE_LIST="e"

}
ccenum(EDITOR_BIND_TYPE)

@ccclass('MyTest')
export class MyTest extends Component {
    @property({ type: EDITOR_BIND_TYPE })
    myBindType = EDITOR_BIND_TYPE.BIND_TYPE_NUMBER;
}

也可以不用 ccenum,而用楼主示例代码中的 Enum` 函数。但是要注意,Enum 函数会为枚举生成 Reverse Mapping,即 value -> name,会更占用一点内存和初始化的时间。

export enum EDITOR_BIND_TYPE {

    BIND_TYPE_STR = "1",

    BIND_TYPE_NUMBER="b",

    BIND_TYPE_VALUE_NUMBER = 1234,

    BIND_TYPE_OBJECT ="c",

    BIND_TYPE_UNKNOWN ="d",

    BIND_TYPE_LIST="e"

}

@ccclass('MyTest')
export class MyTest extends Component {
    @property({ type: Enum(EDITOR_BIND_TYPE) })
    private myBindType = EDITOR_BIND_TYPE.BIND_TYPE_NUMBER;

前几天一直翻论坛找到第二种方法解决了,感谢