CodeBind - Unity 组件绑定代码生成工具
June 18, 2026 · View on GitHub
🚀 基于节点命名规则的智能代码生成工具,告别手动拖拽组件的繁琐操作!
CodeBind 是一款为 Unity 开发者设计的高效代码生成工具,通过简单的命名规则和特性标记,自动生成与预制体绑定的脚本代码。零侵入性设计,无需修改现有代码结构,即可大幅提升开发效率。
✨ 核心特性
🎯 智能命名识别
- 模糊匹配:节点名称支持缩写识别,
Self_Tr自动识别为Transform,生成属性SelfTransform - 多组件绑定:单节点支持绑定多个组件,如
Self_Transform_Button生成SelfTransform和SelfButton - 全匹配模式:使用通配符
*绑定节点所有脚本,如Self_* - 数组支持:通过括号标记自动生成数组,如
Item (0)、Item (1)生成ItemTransformArray
🔧 灵活配置
- 自定义分隔符:根据团队命名习惯自由设置分隔字符
- 命名空间支持:自动生成指定命名空间的代码
- 路径记忆:自动记住上次使用的代码生成路径
- 自定义命名风格与额外代码:通过实现
ICodeBindCustomizer接口自定义字段/属性命名风格,并向生成代码追加额外内容
🏗️ 两种工作模式
- MonoBehaviour 模式:直接在 MonoBehaviour 类上使用,最便捷的使用方式
- 纯 C# 模式:通过
ICSCodeBind接口支持非 MonoBehaviour 类,适合需要分离逻辑的场景
🎨 开发体验优化
- 零侵入性:生成的代码使用 partial class,不影响原有代码结构
- 嵌套支持:智能识别已绑定节点,避免重复绑定子节点,非常适合列表项(List Item)等场景
- 引用丢失提示:自动检测绑定数据中的空引用,及时在 Inspector 中显示警告信息
- 多种操作方式:支持 Inspector 面板按钮操作(Generate Bind Code / Generate Serialization)和右键快捷菜单快速创建
📦 安装方式
方法一:通过 Unity Package Manager(推荐)
- 打开 Unity 编辑器
- 打开 Window > Package Manager
- 点击左上角 + 按钮
- 选择 Add package from git URL
- 输入:
https://github.com/XuToWei/CodeBind.git - 点击 Add
方法二:手动下载
下载本仓库并将其解压到项目的 Packages 文件夹中。
⚙️ 依赖项
本项目依赖以下插件(需自行安装):
- Odin Inspector - 增强编辑器界面和序列化功能
🚀 快速开始
方式一:MonoBehaviour 模式(推荐)
1️⃣ 添加特性标记
在你的 MonoBehaviour 类上添加 [MonoCodeBind] 特性:
using UnityEngine;
using CodeBind;
namespace Game
{
[MonoCodeBind('_')] // '_' 为分隔符,可自定义
public partial class TestMono : MonoBehaviour
{
// 你的业务代码
private void Start()
{
// 自动生成的属性可以直接使用
SelfTransform.position = Vector3.zero;
SelfButton.onClick.AddListener(OnButtonClick);
}
private void OnButtonClick()
{
Debug.Log("Button Clicked!");
}
}
}
2️⃣ 设置节点命名
在 Unity Hierarchy 中按照命名规则设置节点名称:
TestGameObject
├── Self_Transform // 绑定 Transform 组件
├── Self_Button // 绑定 Button 组件
├── Title_Text // 绑定 Text 组件
├── Items_Transform_* // 绑定所有组件
└── ListItems
├── Item (0) // 数组元素
├── Item (1)
└── Item (2)
3️⃣ 生成代码和数据
在 Inspector 面板中点击以下按钮:
- Generate Bind Code - 生成绑定代码(.Bind.cs 文件)
- Generate Serialization - 生成序列化数据(将组件引用保存到预制体)

4️⃣ 生成的代码示例
工具会自动生成 TestMono.Bind.cs 文件:
// This is automatically generated by CodeBind. Please do not modify it.
namespace Game
{
public partial class TestMono
{
// 私有字段(带 m_ 前缀)
[UnityEngine.SerializeField] private UnityEngine.Transform m_SelfTransform;
[UnityEngine.SerializeField] private UnityEngine.UI.Button m_SelfButton;
[UnityEngine.SerializeField] private UnityEngine.UI.Text m_TitleText;
[UnityEngine.SerializeField] private UnityEngine.Transform[] m_ItemTransformArray;
// 公共属性访问器
public UnityEngine.Transform SelfTransform => m_SelfTransform;
public UnityEngine.UI.Button SelfButton => m_SelfButton;
public UnityEngine.UI.Text TitleText => m_TitleText;
public UnityEngine.Transform[] ItemTransformArray => m_ItemTransformArray;
}
}
方式二:纯 C# 模式
适用于不希望继承 MonoBehaviour 的场景。
1️⃣ 创建 C# 类
using CodeBind;
namespace Game
{
public partial class TestCS : ICSCodeBind
{
public void Initialize()
{
// 使用生成的绑定属性
TitleText.text = "Hello CodeBind!";
}
}
}
2️⃣ 添加 CSCodeBindMono 组件
在 GameObject 上添加 CSCodeBindMono 组件,并拖入你的 C# 脚本。

3️⃣ 获取绑定对象
// 自动缓存,无需担心性能
TestCS testCS = gameObject.GetCSCodeBindObject<TestCS>();
testCS.Initialize();
📝 命名规则详解
基础格式
[变量名]_[组件类型][_组件类型2...][(数组索引)]
组件类型缩写
支持模糊匹配,常用缩写包括:
| 全称 | 缩写示例 |
|---|---|
| Transform | Tr, Trans |
| Button | But, Btn |
| Text | Txt |
| Image | Img |
| RectTransform | Rect, RectTr |
| GameObject | Go, Obj |
你也可以通过 CodeBindNameAttribute 和 ICodeBindNameTypeConfig 自定义命名规则。
示例
| 节点命名 | 生成的属性名 | 说明 |
|---|---|---|
Player_Transform | PlayerTransform | Transform 组件 |
UI_Button_Image | UIButton, UIImage | 同时绑定 Button 和 Image |
Items_* | ItemsStar | 通配符绑定所有组件 |
ListItem (0) | ListItemTransformArray | 数组元素,自动生成数组 |
Child_Nested_Transform | - | 如果 Child 有 CodeBind 特性,Nested 不会被识别 |
注意:生成的属性名会移除分隔符并以大写字母开头(PascalCase)。例如
Self_Transform生成属性SelfTransform,对应私有字段为m_SelfTransform。
🛠️ 高级功能
右键快速生成 MonoBehaviour
- 在 Hierarchy 中选中一个 GameObject
- 右键选择 GameObject > CodeBind > Mono Code Creator
- 在弹出窗口中设置:
- Code Name:类名
- Code Namespace:命名空间
- Code Path:保存路径
- Separator Char:分隔符
- 点击 Create Code File 即可生成代码并自动添加到该 GameObject
自定义命名类型
通过 CodeBindNameAttribute 处理业务代码中的自定义类型(应用于 Component 类):
using UnityEngine;
using CodeBind;
[CodeBindName("MyCustomComponent")]
public class MyCustomComponent : MonoBehaviour
{
// 你的自定义组件代码
}
通过实现 ICodeBindNameTypeConfig 接口可以批量提供类型映射并带优先级,适合维护团队/项目级别的类型识别表。可以有多个实现,识别名或类型冲突时优先级高的覆盖优先级低的;内置的缺省配置优先级为 0,自定义实现的 Priority 需要大于 0 才能覆盖。
using System;
using System.Collections.Generic;
using UnityEngine;
using CodeBind.Editor;
public sealed class ProjectBindTypeConfig : ICodeBindNameTypeConfig
{
public int Priority => 100; // 大于缺省配置的 0
public IReadOnlyDictionary<string, Type> BindNameTypeDict { get; } = new Dictionary<string, Type>
{
{ "MyCustomComponent", typeof(MyCustomComponent) },
{ "MCC", typeof(MyCustomComponent) },
// 也可以覆盖缺省映射,例如把 "Text" 改绑到 TextMeshPro
// { "Text", typeof(TMPro.TextMeshProUGUI) },
};
}
两种方式的优先级:
CodeBindNameAttribute特性 >ICodeBindNameTypeConfig实现(按Priority由高到低)> 内置缺省配置。
自定义代码生成(ICodeBindCustomizer)
通过实现 ICodeBindCustomizer 接口,可以自定义生成代码的命名风格,并向生成的代码中追加额外代码。无需实现即使用默认行为(字段前缀 m_、属性沿用组合名大写开头、无额外代码)。
零侵入:直接新建一个类实现接口即可被自动发现,无需注册。Mono 模式和纯 C# 模式共用同一份实现。
命名方法只关心风格:
GetFieldName/GetPropertyName接收的是框架已拼好的组合名(变量名 + 类型名),数组会自动追加固定的Array后缀后再传入。实现只需决定前后缀风格,无需自己拼接,也不再区分单个与数组方法。
接口成员
| 成员 | 说明 | 默认值 |
|---|---|---|
int Priority | 优先级,数值越大越优先,最高优先级的实现会被使用 | 默认实现为 0 |
string GetFieldName(string name) | 私有序列化字段命名,name 为已拼好的组合名 | "m_" + name |
string GetPropertyName(string name) | 公共属性命名,name 为已拼好的组合名 | name(大写开头) |
string GenerateExtraCode(...) | 返回追加到 partial 类体内的额外代码,无内容返回空字符串 | 返回 string.Empty |
优先级规则:所有实现(含默认实现)一起参与比较,取
Priority最高者;若最高优先级有多个实现,会报错并取其一。因此自定义实现的Priority需要大于0才能覆盖默认。
示例一:自定义命名风格
using CodeBind.Editor;
// 字段改用 "_" 前缀,属性沿用默认(组合名大写开头)
public sealed class MyCodeStyle : ICodeBindCustomizer
{
public int Priority => 100; // 大于默认的 0
public string GetFieldName(string name) => $"_{name}";
public string GetPropertyName(string name) => name;
public string GenerateExtraCode(string nameSpace, string className,
System.Collections.Generic.List<CodeBindData> bindDatas,
System.Collections.Generic.SortedDictionary<string, System.Collections.Generic.List<CodeBindData>> bindArrayDataDict,
string indentation) => string.Empty;
}
效果:Self_Transform 生成字段 _SelfTransform、属性 SelfTransform;数组生成 _ItemTransformArray / ItemTransformArray。
示例二:追加额外代码
GenerateExtraCode 提供绑定成员信息,返回的字符串会原样追加进生成类体内(单个成员与数组成员分开提供):
using System.Collections.Generic;
using System.Text;
using CodeBind.Editor;
public sealed class MyExtraCode : ICodeBindCustomizer
{
public int Priority => 100;
// 命名沿用默认行为
public string GetFieldName(string name) => $"m_{name}";
public string GetPropertyName(string name) => name;
public string GenerateExtraCode(string nameSpace, string className,
List<CodeBindData> bindDatas,
SortedDictionary<string, List<CodeBindData>> bindArrayDataDict,
string indentation)
{
StringBuilder sb = new StringBuilder();
// 为每个绑定成员生成一行注释,自行拼接 变量名 + 类型名 作为组合名
foreach (CodeBindData bindData in bindDatas)
{
sb.AppendLine($"{indentation}// bind member: {GetPropertyName($"{bindData.BindName}{bindData.BindPrefix}")} ({bindData.BindType.Name})");
}
return sb.ToString();
}
}
绑定数据 CodeBindData
GenerateExtraCode 直接提供绑定数据:bindDatas 为单个绑定列表,bindArrayDataDict 为数组绑定字典(键为数组名,值为该数组各元素的绑定数据)。
public sealed class CodeBindData
{
public string bindName { get; } // 绑定的变量名
public System.Type bindType { get; } // 绑定类型
public string bindPrefix { get; } // 绑定的类型名
public UnityEngine.Transform bindTransform { get; } // 绑定的节点
}
成员的字段名/属性名通过
GetFieldName/GetPropertyName由变量名 + 类型名组合名计算得到;数组在传入前由框架自动追加固定的Array后缀。
❓ 常见问题
Q: 生成的代码文件在哪里?
生成的代码文件默认与原脚本同目录,文件名为 原类名.Bind.cs。
Q: 修改节点名称后需要重新生成吗?
是的,修改节点命名或结构后,需要重新点击 Generate Bind Code 和 Generate Serialization。
Q: 支持嵌套预制体吗?
支持。已经标记了 MonoCodeBind 或 CodeBindAttribute 的节点,其子节点不会被父级识别,避免重复绑定。这个特性非常适合处理列表场景,例如:ScrollView 中的每个 ListItem 可以有自己的绑定脚本,父级 ScrollView 的绑定不会影响到 ListItem 内部的节点。
Q: 是否支持其他编辑器扩展?
需要依赖 Odin Inspector,其他编辑器扩展不影响使用。
💬 交流与反馈
- QQ 交流群:949482664
- 问题反馈:GitHub Issues
📄 许可证
本项目基于 MIT License 开源。
🌟 为什么选择 CodeBind?
| 传统方式 | 使用 CodeBind |
|---|---|
| ❌ 手动拖拽几十个组件到脚本 | ✅ 按命名规则自动生成 |
| ❌ 修改 UI 后重新拖拽 | ✅ 重新生成即可 |
| ❌ 代码与数据耦合 | ✅ partial class 分离生成代码 |
| ❌ 容易遗漏或拖错组件 | ✅ 自动识别,不会出错 |
| ❌ 团队协作易冲突 | ✅ 生成代码规范统一 |
⭐ 如果这个工具对你有帮助,请给我们一个 Star!