Files
BusyRabbit/Tools/使用示例.md
2025-09-24 13:57:17 +08:00

2.7 KiB
Raw Permalink Blame History

UE头文件解析工具使用示例

基本用法

扫描整个项目

python Tools/ue_header_parser.py Source/BusyRabbit/Public -o Content/Lua/@types

扫描特定目录

# 扫描Components目录
python Tools/ue_header_parser.py Source/BusyRabbit/Public/Components -o Content/Lua/@types

# 扫描Level目录
python Tools/ue_header_parser.py Source/BusyRabbit/Public/Level -o Content/Lua/@types

扫描单个文件

# 直接指定文件路径(需要先确保输出目录存在)
python Tools/ue_header_parser.py Source/BusyRabbit/Public/Components/InventoryComponent.h -o Content/Lua/@types

生成结果示例

输入头文件 (InventoryComponent.h)

USTRUCT(BlueprintType)
struct FInventoryGrid {
    GENERATED_BODY()
public:
    UPROPERTY(BlueprintReadOnly, DisplayName = "物品ID")
    int32 ItemID;

    UPROPERTY(BlueprintReadWrite, DisplayName = "当前的数量")
    int32 CurrentCount;

    UPROPERTY(BlueprintReadWrite, DisplayName = "最大堆叠限制")
    int32 MaxCount;

    UPROPERTY(BlueprintReadWrite, DisplayName = "优先级")
    int32 Priority;
};

UCLASS()
class BUSYRABBIT_API UInventoryComponent : public ULuaActorComponent {
    GENERATED_BODY()
public:
    UFUNCTION(BlueprintCallable)
    bool IsCanContain(int32 ItemID, int32 Count);
    
    // ... 其他函数和属性
};

输出注解文件 (InventoryComponent.d.lua)

-- 自动生成的emmy-lua注解文件
-- 源文件: Source/BusyRabbit/Public/Components\InventoryComponent.h

---@class FInventoryGrid
---@field ItemID integer
---@field CurrentCount integer
---@field MaxCount integer
---@field Priority integer
local FInventoryGrid = {}

---@class UInventoryComponent : ULuaActorComponent
---@field Capacity integer
---@field InventoryList table<any>
---@param ItemID integer
---@param Count integer
---@return boolean
function UInventoryComponent:IsCanContain(ItemID, Count) end

-- ... 其他函数注解

集成到开发流程

1. 定期生成注解

建议在每次UE头文件更新后运行工具重新生成注解。

2. 版本控制

将生成的.d.lua文件添加到版本控制中,方便团队共享。

3. IDE配置

确保IDE如VSCode能够识别Content/Lua/@types目录中的注解文件。

注意事项

  1. 类型映射: 工具会自动将C++类型映射到Lua类型
  2. 模板类型: 支持TArray<FInventoryGrid>等模板类型的解析
  3. 委托支持: 自动生成委托类型的Call函数注解
  4. 错误处理: 工具会跳过无法解析的文件并继续处理其他文件

故障排除

如果遇到问题,请检查:

  • 头文件语法是否正确
  • UE宏格式是否符合标准
  • 输出目录权限是否足够
  • Python版本是否为3.6+