【插件】第二好用的自动绑定插件,免费开源版

Best AutoBinder —— Cocos Creator 3.x 自动绑定插件

告别繁琐的手动拖拽绑定 UI,只要节点命名符合规范,一键即可完成 @property 声明与脚本的自动绑定。

核心优势

  • 极简使用:操作简单直观,上手即用

  • 高效绑定:一键自动生成属性声明并绑定节点

  • 无侵入式:基于 AST 分析,不破坏原有代码结构

  • 组件全覆盖:支持Cocos Creator常用内置组件 + 项目自定义组件


使用须知

  1. 版本限制:仅支持 Cocos Creator 3.x(只在3.8.3版本测试过,理论上兼容3.x所有版本)

  2. 语言限制:仅支持 TypeScript 脚本

  3. 自定义组件:需保证脚本名称与组件名称完全一致

  4. 数据类型:不支持数组类型(如 @property([Node])

  5. 节点重命名:已经被导出声明的节点,重命名后导出会声明新的变量,旧变量依然保留并且绑定依然有效

快速开始

  1. 在 Cocos Creator 扩展菜单中启用插件

  2. 场景节点按规则命名:[组件类型]@[属性名]

  3. 选中节点,按 Alt+G 或右键选择"绑定"

  • 步骤1

  • 步骤2

  • 步骤3

  • 步骤4

  • 步骤5

节点命名规范

格式

[组件类型]@[属性名],例如:


Label@score      → @property(Label) score!: Label

Button@confirm  → @property(Button) confirm!: Button

Sprite@icon    → @property(Sprite) icon!: Sprite

后缀规则

节点名以 # 结尾表示已绑定完成,不会递归查询子节点:

  • Button@startBtn# - 已绑定按钮

  • PlayerName@playerName# - 已绑定预制体

属性名转换

属性名中的 - 自动转换为 _(TS 变量名不允许 -):

  • Label@score-001@property(Label) score_001!: Label

支持的组件类型

| 节点前缀 | 组件类型 | 示例 |

|---------|---------|------|

| Node | cc.Node | Node@root |

| Sprite | cc.Sprite | Sprite@icon |

| Label | cc.Label | Label@score |

| Button | cc.Button | Button@confirm |

| Toggle | cc.Toggle | Toggle@option |

| ToggleGroup | cc.ToggleContainer | ToggleGroup@tgc |

| EditBox | cc.EditBox | EditBox@input |

| ScrollView | cc.ScrollView | ScrollView@area |

| ProgressBar | cc.ProgressBar | ProgressBar@hp |

| Slider | cc.Slider | Slider@vol |

| Layout | cc.Layout | Layout@box |

| RichText | cc.RichText | RichText@msg |

| PageView | cc.PageView | PageView@pages |

| Mask | cc.Mask | Mask@area |

| Graphics | cc.Graphics | Graphics@draw |

| Skeleton | cc.sp.Skeleton | Skeleton@spine |

| DragonBones | cc.dragonBones.ArmatureDisplay | DragonBones@db |

| Animation | cc.Animation | Animation@anim |

| Camera | cc.Camera | Camera@main |

| Widget | cc.Widget | Widget@root |

| MeshRenderer | cc.MeshRenderer | MeshRenderer@model |


自定义别名

设置面板

通过扩展菜单打开设置面板,配置自定义别名:

  1. Cocos 组件类型:内置完整类型(如 cc.Label

  2. 内置别名:短别名(如 Label

  3. 自定义别名:用户自定义别名

使用别名

设置别名后,节点可使用自定义名称:

  1. cc.Label 设置为 MyLabel

  2. 场景节点 MyLabel@playerName

  3. 绑定后生成:


import { Label } from 'cc';

@property(Label) playerName!: Label;


自定义组件支持

节点命名为 [组件名]@[属性名],例如:

  • PlayerName@playerName - 节点上挂载 PlayerName 组件

  • 绑定后生成:


import { PlayerName } from 'db://assets/Script/Component/PlayerName';

@property(PlayerName) playerName!: PlayerName;

联系作者

  • 微信:shaopianwola(备注autobinder)






免费开源版???

没看到开源啊

我现在的框架,不挂载不绑定,你们难道不觉得挂载和绑定就很繁琐吗?

直接 cc.find 吗?

/**

* 通过路径获取子节点并获取组件

* @param parent - 父节点

* @param url - 节点路径

* @param com - 组件类型

* @returns 找到的组件实例

*/

public static getChildByUrl(parent: Node, url: string): Node | null;

public static getChildByUrl<T extends Component>(parent: Node, url: string, com: new () => T): T | null;

public static getChildByUrl<T extends Component>(parent: Node, url: string, com?: new () => T): T | Node | null {

    if (!parent) {

        LOG.warn("NodeUtil父节点为空");

        return null;

    }

    let currentNode = parent.getChildByPath(url)

    if (currentNode === null) {

        // LOG.warn(`NodeUtil找不到节点${url}`);

        return null;

    }

    if (com) {

        return this.getOrAddComponent(currentNode, com);

    } else {

        return currentNode;

    }

}

差不多就类似这种吧,各有利弊

怎么可能,做了操作节点是直接可以通过this获取到

差不多吧image ,this.nodes.想要的节点.组件

nodes和refreshNodes是啥作用的啊,有点看不出来

(帖子被作者删除,如无标记将在 24 小时后自动删除)

这不就是 2dx 时代写死记录节点所有层级的路径的做法

先设定好节点名称,命名规则为属性类型+属性名称,然后才能一键绑定吗?
感觉有点麻烦了呢。

哦哦有个nodesType,不过那这样所有节点名命名就一定得符合变量名的规则了吧

只有一点要使用的节点名在该预制体上保持唯一就行,框架介绍注意事项会特别标注

其实这个也简单,如果不管这个也行,有重复的节点名搞个插件自动改了就行,但没必要。如果是你自己拼的页面,对于需要使用的节点肯定命名会特别点。当然如果是拼接同学拼的话,你到时候用一般也会去改要用的节点名。

妈的,还在商店审核中,一周多了

不用cc.find


商店审核太慢了,等我传github吧

不要想了,最近store审核,蜗牛速度.可能一周过审一个.
说是有程序在审核,但程序也有其它事要做,不可能一直审核,所以,速度慢得要死.

要根据属性类型和变量名才能生成 @property(Button) btn_test ts代码

我回复的是另外一个层主。

PS:我自己也有类似的插件