Cocos Creator 巧用装饰器,给你的属性检查器面板加点「料」

引言:如何让你的数据在属性检查器(Inspector)里以滚动条、下拉框、颜色盘、复选框等方式展示?如何提高数据直观度和约束能力,提高使用者(特别是非程序员)的生产效率?如何在属性检查器面板中展开自己写的自定义类属性?今天这篇文章将解答你的疑问。

40890d5dbe3ffcf7594895d5726968a0.png

属性检查器面板是我们在使用 Cocos Creator 中最常用到的功能面板之一,便捷的操作能让我们的开发更加省力。那么在使用的时候,小伙伴们有没有想过它的实现原理?自己是否可以实现出相同的效果呢?如何将自定义的 class 也显示到属性检查器面板中呢?

3670d15efcffe1cc6e4149d7770a2c2c.png

最近菜鸟在开发中使用了 Cocos Creator 的装饰器来与 Inspector 面板结合实现,长话短说,直接见正文。

TypeScript 装饰器

首先咱们来了解一下 TypeScript 对装饰器的解释:在一些场景下我们需要额外的特性来支持标注或修改类及其成员,装饰器(Decorators)为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。

从上边的解释中 我们可以提取到几个关键点:

  • 作用:标注或修改类及其成员

  • 作用目标:类及其成员(类,方法, 访问符,属性或参数)

继续往下了解,可以知道 TypeScript 装饰器大概存在:类装饰器、属性装饰器、方法装饰器、方法参数装饰器这几种。有关 TypeScript 装饰器的更多内容,小伙伴们可以自己查阅资料了解一下。

Cocos Creator 中的装饰器

这才是咱们今天讨论的重点。

从 TypeScript 成为 Cocos Creator 3.x 主要的开发语言开始,装饰器就成了大家必须要了解的内容。我们首先来认识一下序列化、Cocos Creator 的脚本编译时机与装饰器执行时机

  • 序列化:默认情况会将编辑器中设置好的属性值保存到场景等资源文件中,之后在加载场景时就会自动还原成设置好的属性值。

  • 脚本编译时机:小伙伴们可能都发现了,我们在外部脚本编辑器修改项目脚本后,重新返回 Cocos Creator 会自动的触发脚本编译。

  • 装饰器执行时机:修饰器对类的行为的改变,是代码编译时发生的(不是 TypeScript 编译,而是 js 在执行机中编译阶段),而不是在运行时。这意味着,修饰器能在编译阶段运行代码。也就是说,修饰器本质就是编译时执行的函数。

基本用法

组件类装饰器(executeInEditMode)

正常情况下,所有组件都只会在运行时执行,也就是说它们的生命周期回调在编辑器模式下并不会触发。如果需要在编辑器模式下就执行,可以使用组件类装饰器

ec131cff69263ef9e1c9c7dda62f440d.png

属性装饰器(property)

属性编辑器的常见属性类型:

  • 基础属性:CCInteger、CCFloat、CCBoolean、CCString

  • cc 类型

  • 数组类型:[CCInteger]、[Node]

fe68dc0d470c419fa8d95c463e6ea92b.png

可见性

需要注意的是:不是所有定义的属性装饰器都是可见的。以下两种情况是不会显示在编辑器子中的:

  • 属性名是否以 _ 开头

  • visible 属性值为 false

aa70f3e653f2af5e76ec33579fd9b7f9.png

序列化(serializable)

属性默认情况下都会被序列化,序列化后就会将编辑器中设置好的属性值保存到场景等资源文件中,之后在加载场景时就会自动还原成设置好的属性值。如果不想序列化,可以设置 serializable: false。

@property({ serializable: false })
num = 0;

get/set 使用

@property
_num:number=1;
@property({type:CCInteger,tooltip:"提示内容"})
set num(val){
    this._num=val;
}
get num(){
    return this._num;
}

以上内容将一些简单的,最常用的基本用法进行介绍,详细内容可以自行参考官方文档。

更多用法

下拉列表

08b05320e77c9606489aa428794c196c.png

滑动条

@property({type:CCFloat,slide:true,max:1.0,min:0.0,step:0.01})
slide:number=0.5;

9e316c8c9793e88c4a4510cf8b6389f6.gif

自定义样式

e1a05e5f8081560c2a047895619f3f0a.png

样式一

81b9851f0a52d431dd48febb67ec994e.png

样式二

enum Type {
    one = 1,
    two = 2,
    three = 3,
    four = 4,
    five = 5,
}
Enum(Type);
@ccclass('Test4')
@executeInEditMode(true)
export class Test4 extends Component {
    @property
    _type: Type = Type.one;
    @property({ type: Type })
    get type() {
        return this._type;
    }
    set type(val) {
        this._type = val;
        this.setType(val);
    }
    @property
    _num: number = 10;
    @property({
        type: CCInteger, visible: function (this) {
            return this.isShowNum;
        }
    })
    get num() {
        return this._num;
    }
    set num(val) {
        this._num = val;
    }
    @property
    _str: string = "你好";
    @property({
        visible: function (this) {
            return this.isShowString;
        }
    })
    get str() {
        return this._str;
    }
    set str(val) {
        this._str = val;
    }

    @property
    _bool: boolean = true;
    @property({
        visible: function (this) {
            return this.isShowBool;
        }
    })
    get bool() {
        return this._bool;
    }
    set bool(val) {
        this._bool = val;
    }
    private isShowNum = false;
    private isShowString = false;
    private isShowBool = false;
    private setType(val): void {
       ...
    }

    onLoad() {
        console.log("onLoad");
    }
}

2cd0e43dc1420bb6c0c38e1c9d31d864.gif

样式三


点击文末【阅读原文】下载完整 Demo。本文首发在菜鸟的公众号「搬砖小菜鸟」,欢迎关注、交流,查看更多引擎技术干货!

往期精彩

201b40f59c3407c5ebde8eedf9fb6039.png

6bd3b31d492f4438e6889331eece68c9.png

8d8fbc6f144bc19f8196ab454094c675.png

a25afe625dbca087c0c0689bd29a2984.gif

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos Creator编辑提供了一套强大的功能,使开发者可以轻松地编写工具来增强开发流程。以下是Cocos Creator编辑如何编写工具的步骤: 1.熟悉Cocos Creator编辑:首先,开发者需要熟悉Cocos Creator编辑的基本操作和功能。这包括了场景编辑、节点操作、组件配置等。 2.了解Cocos Creator的插件机制:Cocos Creator提供了插件机制,开发者可以通过插件扩展编辑的功能。开发者可以在官方文档中找到关于插件开发的详细说明。 3.确定工具的需求:开发者需要明确工具的需求和目标。这可以是一项新功能、自动化操作、场景批量处理等。确保明确工具的功能和预期效果。 4.开发插件:根据工具的需求,开发者可以通过插件机制来实现工具。插件可以包括自定义的编辑窗口、面板、节点操作脚本等。 5.使用API扩展功能:Cocos Creator提供了丰富的API来扩展编辑的功能。开发者可以使用这些API来实现工具的核心功能。 6.测试和调试:在编写工具过程中,开发者需要进行反复的测试和调试以确保工具的正确性和可靠性。这可以包括单元测试、集成测试和用户界面测试等。 7.发布和分享工具:完成工具开发后,开发者可以考虑将其发布和分享。开发者可以将工具打包成插件,供其他开发者使用和安装。 总之,使用Cocos Creator编辑编写工具可以有效地提高开发效率和质量。通过插件机制和丰富的API,开发者可以根据自己的需求自定义和扩展编辑的功能。希望这些步骤能对您编写Cocos Creator编辑工具有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值