官方大大-怎么优雅的在属性面板使用对象,类似creator中的Enum

游戏内经常 会有 用对象来表示键值对:
A={
xxx1:‘abc’,
xxx2:‘bcd’
}.
有没有办法类似于 enum的方式,在属性面板中使用呢?(就像 scrollView 里面的direction一样,有下拉框)。
感觉这应该会是一个特别公用的功能

ts:
export enum xxx{
a=1,
b=2
}
@property({
type: cc.Enum(xxx)
})
somexxx: xxx = xxx.a;

1赞

你这问题文档有 CCClass 进阶参考

问这个问题,就是不想像你说的这样做的

那还真不知道怎么做

确实是没有

scrollView 有direction吗

你要下拉框不就是跟2楼说的那样子吗

做个搬运工

Cocos技术派 | TS版各种属性声明详解

高级篇 Cocos技术派 | TS版属性面板定义高级篇

原创 大掌教 Cocos Creator研究笔记

老哥们,看看题目再回啊:joy:

对象组件化

编辑器现在只支持值是数字的对象,只能变相地用,不建议

/**
 * 对象 to 枚举
 */
function toEnum<T extends Object>(obj: T): { [P in keyof T]: number } {
    let keys = Object.keys(obj);
    let e: any = {};
    for (let i = 0; i < keys.length; i++) {
        const key = keys[i];
        e[key] = i;
    }
    return cc.Enum(e);
}


/**
 * 枚举值 to 对象值
 */
function enumTo(obj: object, _enum: object, e: number) {
    return obj[_enum[e]];
}


/**
 * 对象
 */
let a = {
    Class: cc.Prefab,
    String: "asdasdasd"
};


/**
 * 对应枚举
 */
let enum_a = toEnum(a);


/**
 * 测试组件
 */
@ccclass
export class Test extends cc.Component {

    @property({ type: enum_a })
    test: number = enum_a.Class;

    onLoad() {
        enumTo(a, enum_a, this.test);       // cc.Prefab
    }

}

嗯,大概明白为啥编译器这样不好弄,算了,还是得自己做个枚举映射了

顺便问下大神,该如何在engin层自定义添加一个component呢?试了好几次,都是报错