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