126 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			126 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # 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<FInventoryGrid> | |||
|  | 
 | |||
|  | ---@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 | |||
|  | - 是否有语法错误或缺失的分号 | |||
|  | 
 | |||
|  | ## 贡献
 | |||
|  | 
 | |||
|  | 欢迎提交问题和改进建议! |