# UE头文件解析工具 这是一个用于扫描UE头文件并生成slua插件的emmy-lua注解的Python工具。 ## 功能特性 - 自动扫描指定目录下的所有UE头文件(.h) - 解析UCLASS、USTRUCT、UENUM、UFUNCTION、UPROPERTY等宏 - 生成符合emmy-lua标准的类型注解文件(.d.lua) - 支持C++类型到Lua类型的自动转换 - 支持递归扫描子目录 ## 支持的UE宏 - **UCLASS**: 解析类定义,包括继承关系 - **USTRUCT**: 解析结构体定义和属性 - **UENUM**: 解析枚举定义和值 - **UFUNCTION**: 解析函数声明,包括参数和返回值 - **UPROPERTY**: 解析属性声明 - **DECLARE_DYNAMIC_DELEGATE**: 解析委托声明 ## 安装和使用 ### 前置要求 - Python 3.6+ - 无需额外依赖 ### 基本用法 ```bash # 扫描Source目录并生成注解文件到Content/Lua/@types目录 python ue_header_parser.py Source/BusyRabbit -o Content/Lua/@types # 扫描当前目录并生成注解文件到同目录 python ue_header_parser.py . # 递归扫描整个项目 python ue_header_parser.py Source --recursive -o Content/Lua/@types ``` ### 命令行参数 - `directory`: 要扫描的目录路径(必需) - `-o, --output`: 输出目录路径(可选,默认为源文件同目录) - `--recursive`: 递归扫描子目录(可选) ## 生成的注解格式 工具会根据UE头文件生成对应的emmy-lua注解: ### 类注解示例 ```lua ---@class UInventoryComponent : ULuaActorComponent ---@field Capacity integer ---@field InventoryList table ---@param ItemID integer ---@param Count integer ---@return boolean function UInventoryComponent:IsCanContain(ItemID, Count) end ``` ### 结构体注解示例 ```lua ---@class FInventoryGrid ---@field ItemID integer ---@field CurrentCount integer ---@field MaxCount integer ---@field Priority integer local FInventoryGrid = {} ``` ### 枚举注解示例 ```lua ---@enum EBusyRoleState local EBusyRoleState = { BonfireIdle = 0, Searching = 1, Picking = 2, PickFinished = 3, BackBonfire = 4 } ``` ### 委托注解示例 ```lua ---@class FOnInventoryChanged ---@field Call fun(ItemID: integer) local FOnInventoryChanged = {} ``` ## 类型映射 工具会自动将C++类型映射到Lua类型: | C++类型 | Lua类型 | |---------|---------| | int32, int64 | integer | | float, double | number | | bool | boolean | | FString, FText, FName | string | | void | nil | | TArray, TMap, TSet | table | | 其他类型 | any | ## 注意事项 1. 工具会跳过没有UE宏的普通头文件 2. 生成的注解文件会保存在`.d.lua`文件中 3. 如果输出目录不存在,工具会自动创建 4. 工具会处理编码问题,但建议确保头文件使用UTF-8编码 5. 对于复杂的模板类型,工具会尝试解析内部类型 ## 故障排除 如果遇到解析错误,请检查: - 头文件语法是否正确 - UE宏格式是否符合标准 - 文件编码是否为UTF-8 - 是否有语法错误或缺失的分号 ## 贡献 欢迎提交问题和改进建议!