当前位置: 首页 > article >正文

【UnLua】在 Lua 中定义 UE 反射类型

【UnLua】在 Lua 中定义 UE 反射类型

====== UEnum ======

C++

UENUM(BlueprintType)
enum class ETest : uint8
{
   Walking,
   Running,
   Sprinting,
   ALS_MAX UMETA(DisplayName="ALS MAX")
};

Test.generated.h

#include "UObject/ObjectMacros.h"
#include "UObject/ScriptMacros.h"

#define FOREACH_ENUM_ETEST(op) \
   op(ETest::Walking) \
   op(ETest::Running) \
   op(ETest::Sprinting) \
   op(ETest::ALS_MAX)


enum class ETest : uint8;
template<> struct TIsUEnumClass<ETest> { enum { Value = true }; };
template<> LYRAGAME_API UEnum* StaticEnum<ETest>();

Test.gen.cpp

  • 生成代码入口 FNativeClassHeaderGenerator::ExportGeneratedEnumInitCode
  • 构造 UEnum 入口 UECodeGen_Private::ConstructUEnum
  • 构造时机:static 注册,所以 C++ 启动时
void EmptyLinkFunctionForGeneratedCodeTest() {}
// Cross Module References
    LYRAGAME_API UEnum* Z_Construct_UEnum_LyraGame_ETest();
    UPackage* Z_Construct_UPackage__Script_LyraGame();
// End Cross Module References
    static FEnumRegistrationInfo Z_Registration_Info_UEnum_ETest;
    static UEnum* ETest_StaticEnum()
    {
        if (!Z_Registration_Info_UEnum_ETest.OuterSingleton)
        {
            Z_Registration_Info_UEnum_ETest.OuterSingleton = GetStaticEnum(Z_Construct_UEnum_LyraGame_ETest, Z_Construct_UPackage__Script_LyraGame(), TEXT("ETest"));
        }
        return Z_Registration_Info_UEnum_ETest.OuterSingleton;
    }
    template<> LYRAGAME_API UEnum* StaticEnum<ETest>()
    {
        return ETest_StaticEnum();
    }
    struct Z_Construct_UEnum_LyraGame_ETest_Statics
    {
        static const UECodeGen_Private::FEnumeratorParam Enumerators[];
#if WITH_METADATA
        static const UECodeGen_Private::FMetaDataPairParam Enum_MetaDataParams[];
#endif
        static const UECodeGen_Private::FEnumParams EnumParams;
    };
    const UECodeGen_Private::FEnumeratorParam Z_Construct_UEnum_LyraGame_ETest_Statics::Enumerators[] = {
        { "ETest::Walking", (int64)ETest::Walking },
        { "ETest::Running", (int64)ETest::Running },
        { "ETest::Sprinting", (int64)ETest::Sprinting },
        { "ETest::ALS_MAX", (int64)ETest::ALS_MAX },
    };
#if WITH_METADATA
    const UECodeGen_Private::FMetaDataPairParam Z_Construct_UEnum_LyraGame_ETest_Statics::Enum_MetaDataParams[] = {
        { "ALS_MAX.DisplayName", "ALS MAX" },
        { "ALS_MAX.Name", "ETest::ALS_MAX" },
        { "BlueprintType", "true" },
        { "ModuleRelativePath", "Common/Defines/Test.h" },
        { "Running.Name", "ETest::Running" },
        { "Sprinting.Name", "ETest::Sprinting" },
        { "Walking.Name", "ETest::Walking" },
    };
#endif
    const UECodeGen_Private::FEnumParams Z_Construct_UEnum_LyraGame_ETest_Statics::EnumParams = {
        (UObject*(*)())Z_Construct_UPackage__Script_LyraGame,
        nullptr,
        "ETest",
        "ETest",
        Z_Construct_UEnum_LyraGame_ETest_Statics::Enumerators,
        UE_ARRAY_COUNT(Z_Construct_UEnum_LyraGame_ETest_Statics::Enumerators),
        RF_Public|RF_Transient|RF_MarkAsNative,
        EEnumFlags::None,
        (uint8)UEnum::ECppForm::EnumClass,
        METADATA_PARAMS(Z_Construct_UEnum_LyraGame_ETest_Statics::Enum_MetaDataParams, UE_ARRAY_COUNT(Z_Construct_UEnum_LyraGame_ETest_Statics::Enum_MetaDataParams))
    };
    UEnum* Z_Construct_UEnum_LyraGame_ETest()
    {
        if (!Z_Registration_Info_UEnum_ETest.InnerSingleton)
        {
            UECodeGen_Private::ConstructUEnum(Z_Registration_Info_UEnum_ETest.InnerSingleton, Z_Construct_UEnum_LyraGame_ETest_Statics::EnumParams);
        }
        return Z_Registration_Info_UEnum_ETest.InnerSingleton;
    }
    struct Z_CompiledInDeferFile_FID_Lyra_Source_LyraGame_Common_Defines_Test_h_Statics
    {
        static const FEnumRegisterCompiledInInfo EnumInfo[];
    };
    const FEnumRegisterCompiledInInfo Z_CompiledInDeferFile_FID_Lyra_Source_LyraGame_Common_Defines_Test_h_Statics::EnumInfo[] = {
        { ETest_StaticEnum, TEXT("ETest"), &Z_Registration_Info_UEnum_ETest, CONSTRUCT_RELOAD_VERSION_INFO(FEnumReloadVersionInfo, 2142314138U) },
    };
    static FRegisterCompiledInInfo Z_CompiledInDeferFile_FID_Lyra_Source_LyraGame_Common_Defines_Test_h_3878057739(TEXT("/Script/LyraGame"),
        nullptr, 0,
        nullptr, 0,
        Z_CompiledInDeferFile_FID_Lyra_Source_LyraGame_Common_Defines_Test_h_Statics::EnumInfo, UE_ARRAY_COUNT(Z_CompiledInDeferFile_FID_Lyra_Source_LyraGame_Common_Defines_Test_h_Statics::EnumInfo));

在这里插入图片描述
在这里插入图片描述

Python

  • 创建入口 FPythonGeneratedEnumBuilder::RegisterDescriptors
  • 创建时机 uenum -> GenerateEnum
@unreal.uenum()
class PyTestColor(unreal.EnumBase):
    RED = unreal.uvalue(1, meta={"DisplayName": "Red (255, 0, 0)"})
    GREEN = unreal.uvalue(2)
    BLUE = unreal.uvalue(3)

====== UStruct ======

====== UClass ======


http://www.kler.cn/a/144967.html

相关文章:

  • MySQL 插入数据
  • I.MX6ULL 中断介绍上
  • DeepSeek-R1 论文解读 —— 强化学习大语言模型新时代来临?
  • flowable expression和json字符串中的双引号内容
  • 留学生scratch计算机haskell函数ocaml编程ruby语言prolog作业VB
  • 5.桥模式(Bridge)
  • 杰发科技AC7801——ADC软件触发的简单使用
  • 黑马点评-Feed流的实现方案,基于推拉结合模式实现笔记推送
  • 前端入门(三)Vue生命周期、组件技术、脚手架、存储、事件总线、
  • 计算机网络常考计算题之循环冗余校验(宝典教学)
  • 30系列显卡在ubuntu下不能满血运行的问题
  • 微信小程序实现【点击 滑动 评分 评星(5星)】功能
  • 2 时间序列预测入门:GRU
  • Scrapy爬虫异步框架(一篇文章齐全)
  • leetcode设计循环队列(链表方式来实现)
  • STM32分区跳转问题
  • Go 本地搭建playground
  • 漏电流直流互感器1-50ua
  • 2023.11.23使用flask实现在指定路径生成文件夹操作
  • Android flutter this and base files have different roots
  • 【Go实现】实践GoF的23种设计模式:备忘录模式
  • 世岩清上:未来科技展览的策展视野
  • 【开源】基于JAVA的车险自助理赔系统
  • PasteNow for mac剪贴板工具
  • 本地缓存与分布式缓存
  • 【SpringCloud】设计原则之分层架构与统一通信协议