一个用于 FairyGUI 编辑器的 TypeScript 插件,支持生成 C#代码并处理跨包组件引用。
- ✅ C# 代码自动生成:为 FairyGUI 组件自动生成 C#类代码
- ✅ 跨包组件支持:智能处理跨包组件的命名空间引用
- ✅ 自定义组件识别:准确识别自定义组件类型并生成相应代码
- ✅ Binder 类生成:自动生成 UIPackage 绑定代码
- ✅ MonoGame 兼容:支持 MonoGame 和 Unity 两种项目类型
- 将插件文件夹复制到 FairyGUI 编辑器的插件目录
- 在 FairyGUI 编辑器中启用插件
- 配置发布设置中的代码生成选项
| < /dev/null | 文件名 | 功能描述 |
|---|---|---|
main.ts |
插件入口点,处理发布事件 | |
GenCode_CSharp.ts |
C# 代码生成核心逻辑 | |
CodeWriter.ts |
代码写入工具类 | |
package.json |
插件配置和依赖信息 |
插件能智能识别跨包引用的组件,并:
- 自动生成正确的命名空间引用
- 添加必要的
using语句 - 处理自定义组件类型映射
- 组件字段生成:为 UI 组件生成对应的 C#字段
- 构造函数生成:生成组件初始化代码
- URL 常量生成:生成组件资源 URL 常量
- 工厂方法生成:生成 CreateInstance 静态方法
- 基础 UI 组件(GButton、GLabel、GTextField 等)
- 自定义组件
- 控制器组件
- 动画组件
using FairyGUI;
using FairyGUI.Utils;
using Package1; // 跨包引用
namespace MyPackage
{
public partial class MyComponent : GComponent
{
public GButton btnSubmit;
public Package1.CustomComponent customComp;
public const string URL = "ui://package_id/component_id";
public static MyComponent CreateInstance()
{
return (MyComponent)UIPackage.CreateObject("PackageName", "ComponentName");
}
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
btnSubmit = (GButton)GetChild("btnSubmit");
customComp = (Package1.CustomComponent)GetChild("customComp");
}
}
}public class MyPackageBinder
{
public static void BindAll()
{
UIObjectFactory.SetPackageItemExtension(MyComponent.URL, typeof(MyComponent));
// ... 其他组件绑定
}
}插件支持以下配置选项(通过 FairyGUI 发布设置):
packageName: 根命名空间名称classNamePrefix: 类名前缀ignoreNoname: 是否忽略未命名组件getMemberByName: 是否通过名称获取成员
git clone 本项目后,将插件文件夹复制到 FairyGUI 编辑器的插件目录中。
- Node.js: 建议使用最新 LTS 版本
- TypeScript: ^5.8.3
- FairyGUI 编辑器: 支持 Puerts 运行时
- 安装依赖:
npm install- 编译 TypeScript:
npx tsc- 生成的 JavaScript 文件将用于 FairyGUI 编辑器运行
- 插件基于 Puerts 运行时,需要 FairyGUI 编辑器支持
- 跨包组件必须正确配置包依赖关系
- 自定义组件类型识别基于资源类型和命名规则
- 生成的代码支持 Unity 和 MonoGame 两种框架
本项目仅供学习和开发使用。
如有问题或建议,请通过以下方式联系:
- 创建 Issue 反馈问题
- 提交 Pull Request 贡献代码
该插件旨在提高 FairyGUI 项目的开发效率,通过自动化代码生成减少手工编写重复代码的工作量。