【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 ======

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/189223.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能-注意力机制之Transformer

Transformer 比较了卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;和自注意力&#xff08;self-attention&#xff09;。值得注意的是&#xff0c;自注意力同时具有并行计算和最短的最大路径长度这两个优势。因此&#xff0c;使用自注意力…

红队攻防实战系列一之metasploit

百目无她&#xff0c;百书质华&#xff0c;君当醒悟&#xff0c;建我中华 本文首发于先知社区&#xff0c;原创作者即是本人 前言 在红队攻防中&#xff0c;我们主要在外网进行信息收集&#xff0c;通过cms或者其他漏洞拿到shell&#xff0c;之后通过免杀木马将windows或lin…

学习.NET验证模块FluentValidation的基本用法(续2:其它常见用法)

FluentValidation模块支持调用When和Unless函数设置验证规则的执行条件&#xff0c;其中when函数设置的是满足条件时执行&#xff0c;而Unless函数则是满足条件时不执行&#xff0c;这两个函数的使用示例如及效果如下所示&#xff1a; public AppInfoalidator() {RuleFor(x>…

C#,《小白学程序》第八课:列表(List)其二,编制《高铁列车时刻表》与时间DateTime

1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary&g…

C# APS.NET CORE 6.0 WEB API IIS部署

1.创建 APS.NET CORE6.0 WEB API项目 默认选项即可 源代码&#xff1a; 项目文件展开&#xff1a; launchSettings.json {"$schema": "https://json.schemastore.org/launchsettings.json","iisSettings": {"windowsAuthentication"…

STM32_8(DMA)

一、DMA DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源12个独立可配置的通道&#xff1a; DMA1&#xff08;7个通道&#xff09;&#xff…

RedLock底层源码分析

RedLock底层源码分析 一、Redlock红锁算法 https://redis.io/docs/manual/patterns/distributed-locks/官网说明 1、为什么要学习这个&#xff1f;怎么产生的&#xff1f; ​ 一个很直接的问题&#xff0c;当我使用redis锁的那台机器挂了&#xff0c;出现了单点故障了&#…

hdlbits系列verilog解答(exams/m2014_q4i)-45

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (output out);assign out 1b0;endmodule三、仿真结果 转载请注明出处&#xff01;

计算机网络常考计算题之循环冗余校验(宝典教学)

文章目录 奇偶效验循环冗余校验例题四步走另一种题型 本文讲述了计算机考研中易出现的循环冗余校验&#xff0c;点赞关注收藏不迷路哦 我是一名双非计算机本科生&#xff0c;希望我的文章可以帮助到你。 奇偶效验 奇偶校验&#xff1a;也可以检测数据在传输过程中是否出现错误…

聚簇索引和非聚簇索引的区别;什么是回表

聚簇索引和非聚簇索引的区别 什么是聚簇索引&#xff1f;&#xff08;重点&#xff09; 聚簇索引就是将数据(一行一行的数据)跟索引结构放到一块&#xff0c;InnoDB存储引擎使用的就是聚簇索引&#xff1b; 注意点&#xff1a; 1、InnoDB使用的是聚簇索引&#xff08;聚簇索…

MySQL日期函数sysdate()与now()的区别,获取当前时间,日期相关函数

select sleep(2) as datetime union all select sysdate() -- sysdate() 返回的时间是当前的系统时间&#xff0c;而 now() 返回的是当前的会话时间。 union all select now() -- 等价于 localtime,localtime(),localtimestamp,localtimestamp(),current_timestamp,curre…

(附源码)SSM环卫人员管理平台 计算机毕设36412

目 录 摘要 1 绪论 1.1背景及意义 1.2国内外研究概况 1.3研究内容 1.4 ssm框架介绍 1.5论文结构与章节安排 2 环卫人员管理平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性…

Kotlin学习——kt中的类,数据类 枚举类 密封类,以及对象

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

为什么网上大量程序员卡35岁年龄招聘,而从来不报道测试、技术支持、售前售后工程师呢?

其实&#xff0c;网上只报道程序员卡35岁&#xff0c;这个说法并不成立。 而是普遍卡35岁&#xff0c;但并没有明确的一个职业类别。 随便搜一下&#xff0c;一眼望过去&#xff0c;其实已经波及很多行业了。 但如果你把IT从业人员合并报道&#xff0c;确实容易给人一种“程序…

如何在 Vim 中剪切、复制和粘贴

目录 前言 如何在 Vim 编辑器中复制文本 如何在 Vim 编辑器中剪切文本 如何在 Vim 编辑器中粘贴文本 如何通过选择文本来剪切和复制文本 通过选择文本复制 在 Vim 中选择文本来剪切文本 前言 在本篇 Vim 快速技巧中&#xff0c;你将学习到剪切和复制粘贴的相关知识。 剪…

qt5.15.2及6.0以上版本安装

文章目录 下载在线安装器安装打开软件 下载在线安装器 因为从qt5.15开始不支持离线下载安装了&#xff0c;只能通过在线安装的方式进行安装。 下载在线安装下载器&#xff1a; 这个在线安装下载器网上也都是可以找到。 这里是其放到网盘上的下载地址&#xff1a; 链接&#x…

使用Python的turtle库绘制随机生成的雪花

1.1引言 在这篇文章中&#xff0c;我们将使用Python的turtle库来绘制一个具有分支结构的雪花。该程序使用循环和随机颜色选择来绘制20个不同大小和颜色的雪花。turtle库是一个流行的绘图库&#xff0c;常用于创建图形用户界面和简单的动画。这个代码实现了一个有趣的应用&…

美国季节性干旱数据集

美国季节性干旱数据集 美国干旱展望栅格数据集由国家气象局气候预测中心生成。它在每个月的最后一天发布&#xff0c;提供下个月的干旱前景信息。“美国季节性干旱展望”数据集每月发布一次&#xff0c;特别是每月的第三个星期四。该数据集对美国不同地区发生干旱的可能性进行…

Ceph----RBD块存储的使用:详细实践过程实战版

RBD 方式的 工作 流程&#xff1a; 1、客户端创建一个pool&#xff0c;并指定pg数量&#xff0c;创建 rbd 设备并map 到文件系统&#xff1b; 2、用户写入数据&#xff0c;ceph进行对数据切块&#xff0c;每个块的大小默认为 4M&#xff0c;每个 块名字是 object序号&#xff…