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

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

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

用法

  • 启动编辑器时遍历 Defines 目录下 lua 脚本来加载 UE 反射类型(开个临时的 Lua VM 即可)
  • 直接像
-- define a uenum in lua
UEnum.EEnumGuestSomethingElse {Value1 = 1;Value2 = 2;
}-- use it like a native uenum
UnLua.Log(UE.EEnumGuestSomethingElse.Value2)UClass { Config = "Game" }.
MoviePipelineExampleRuntimeExecutor(UE.MoviePipelinePythonHostExecutor, UE.IXXXInteface) {activeMoviePipeline = UE.UProperty {};exampleArray = UE.TArray(str);exampleDict = UE.TMap(str, bool);on_map_load = UE.UFunction {override = true;params = { };}
}

====== 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 ReferencesLYRAGAME_API UEnum* Z_Construct_UEnum_LyraGame_ETest();UPackage* Z_Construct_UPackage__Script_LyraGame();
// End Cross Module Referencesstatic 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_METADATAstatic const UECodeGen_Private::FMetaDataPairParam Enum_MetaDataParams[];
#endifstatic 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_METADATAconst 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" },};
#endifconst 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 ======

相关文章:

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

【UnLua】在 Lua 中定义 UE 反射类型 用法 启动编辑器时遍历 Defines 目录下 lua 脚本来加载 UE 反射类型&#xff08;开个临时的 Lua VM 即可&#xff09;直接像 -- define a uenum in lua UEnum.EEnumGuestSomethingElse {Value1 1;Value2 2; }-- use it like a native …...

react的开发中关于图片的知识

React是一个流行的JavaScript库&#xff0c;用于构建用户界面。在React开发中&#xff0c;图片是一个非常重要的元素&#xff0c;可以用于美化界面和展示内容。本篇博客将详细讲解React中关于图片的知识。 1. React中使用图片 在React中使用图片非常简单&#xff0c;只需要使…...

AcWing 188:武士风度的牛 ← BFS

【题目来源】https://www.acwing.com/problem/content/190/ 【题目描述】 农民 John 有很多牛&#xff0c;他想交易其中一头被 Don 称为 The Knight 的牛。 这头牛有一个独一无二的超能力&#xff0c;在农场里像 Knight 一样地跳&#xff08;就是我们熟悉的象棋中马的走法&…...

马养殖场建设VR模拟实训教学平台具有灵活性和复用性

为保障养殖场生物安全&#xff0c;避免疫病传播&#xff0c;学生出入养殖场受时间和地域的限制&#xff0c; 生产实习多以参观为主&#xff0c;通过畜牧企业技术人员的讲解&#xff0c;学生被动了解生产过程。为了解决畜牧养殖实训难的问题&#xff0c;借助VR技术开展畜牧养殖虚…...

云原生技术演进之路-(云技术如何一步步演进的,云原生解决了什么问题?)

云技术如何一步步演进的&#xff1f; 云原生解决了什么问题&#xff1f; 物理设备 电脑刚被发明的时候&#xff0c;还没有网络&#xff0c;每个电脑&#xff08;PC&#xff09;&#xff0c;就是一个单机。 这台单机&#xff0c;包括CPU、内存、硬盘、显卡等硬件。用户在单机…...

基于OGG实现Oracle实时同步MySQL

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…...

〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…...

如何搭建zerotier服务器组网实现内网穿透

小白花了四天的下班时间终于把zerotier网络调通&#xff0c;此刻坐在桌前舒畅地喝口茶&#xff5e;&#xff5e; 下面来详细记录下这几天踩的坑&#xff1a; 起因就在于一直在iPad上用向日葵连接公司电脑的我觉得向日葵的界面用的实在难受&#xff0c;vs code操作十分不灵光&…...

【C++】构造函数和析构函数第四部分(深拷贝和浅拷贝)--- 2023.11.25

目录 什么是浅拷贝&#xff1f;浅拷贝的问题使用深拷贝解决浅拷贝问题结束语 什么是浅拷贝&#xff1f; 如果在一个类中没有人为定义拷贝函数&#xff0c;则系统会提供默认拷贝函数。那么在此默认拷贝函数中主要进行了简单的赋值操作&#xff0c;那这个简单的赋值操作我们一般…...

加速软件开发:自动化测试在持续集成中的重要作用!

持续集成的自动化测试 如今互联网软件的开发、测试和发布&#xff0c;已经形成了一套非常标准的流程&#xff0c;最重要的组成部分就是持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff0c;目前主要的持续集成系统是Jenkins&#xff09;。 那么什么是持…...

工具及方法 - 查找排名:国内网络作家排名

中国十大网络小说作家排名&#xff0c;在买购网的排名&#xff1a; 中国十大网络小说作家 网络小说作家排行榜 中国著名网络写手排名→MAIGOO生活榜 &#xff08;这个网站里还有很多其他的排名。&#xff09; 1&#xff0c;唐家三少 2&#xff0c;辰东 3&#xff0c;我吃西红…...

MySQL INSERT插入条件判断:如果不存在则插入

MySQL INSERT插入条件判断&#xff1a;如果不存在则插入&#xff08;转&#xff09; 我们经常需要进行sql的批量插入&#xff0c;要求&#xff1a;该条记录不存在则插入&#xff0c;存在则不插入。如果使用一条INSERT语句实现呢&#xff1f; ####普通的 INSERT INTO 插入&…...

CSM32RV003:国产高精度16位ADC低功耗RISC-V内核MCU

目录 高精度ADC工业应用工业数据采集应用CSM32RV003简介主要特性 高精度ADC工业应用 高精度ADC即高精度模数转换器&#xff0c;是一种能够将输入模拟信号转换为数字信号的芯片&#xff0c;在多种消费电子、工业、医疗和科研领域都有广泛应用。高精度ADC的主要特点是能够提供高…...

65道常问前端面试题总结react

面试题总结 一.Axios的实现原理 Axios 是一个基于 Promise 的 HTTP 客户端库&#xff0c;用于浏览器和 Node.js 环境。它可以发送 HTTP 请求并处理响应数据。下面是 Axios 实现的基本原理&#xff1a; 封装请求&#xff1a;Axios 提供了一个简单易用的 API&#xff0c;使得开…...

单片机学习1——点亮一个LED灯

Keil软件编写程序&#xff1a; 特殊功能寄存器声明&#xff1a; #include<reg52.h>sbit LED P1^0;void main() {LED 0;while(1); } 代码说明&#xff1a; sbit 语句是特殊功能位声明。 生成HEX文件&#xff0c;这个文件是下载到单片机里的文件。Options for Target…...

PyCharm 配置sqlite3驱动下载问题

单击View -> Tool Windows -> Database&#xff0c;打开Database窗体&#xff0c;之后进行配置&#xff0c;下载驱动包失败&#xff01; 解决 &#xff08;1&#xff09;下载Sqlite3驱动 下载地址: Central Repository: org/xerial/sqlite-jdbc 选择的版本是3.34.0,下载…...

NVMe-oF E-JBOF设计解析:WD RapidFlex网卡、OpenFlex Data24

OpenFlex Data24 NVMe-oF Storage Platform WD的SN840 NVMeSSD新品并没有太吸引我注意&#xff0c;因为它还是PCIe 3.0接口的&#xff0c;要知道Intel的PCIe 4.0 SSD都已经推出了。 但上面这个NVMe-oF&#xff08;NVMe over Fabric&#xff09;EBOF&#xff08;区别于普通JBO…...

visual studio 下的git

我这个是看视频笔记 YouTube : https://www.youtube.com/watch?vgkDASVE_Hdg 主要内容是&#xff1a;建立git 库&#xff0c; 保存commit&#xff0c; 建立分支 create branch, 合并分支merge branch,比较 diff&#xff0c;Revert ,history,delete branch, rename branch, t…...

[架构之路-249]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:如何用图形表达需求,结构化方法的需求分析

目录 一、概述 二、数据模型&#xff1a;E-R图/实体关系图&#xff08;数据单元之间的结构关系&#xff09; 三、功能模型&#xff1a;数据流图DFD&#xff08;逻辑运算&#xff0c;包括输入和输出&#xff0c;实体之间的关系&#xff09;&#xff1a;输入》处理 》 输出 四…...

Django之中间件与CSRF_TOKEN

文章目录 一、什么是中间件二、中间件有什么用三、Django自定义中间件中间件中主要方法及作用创建自定义中间件的步骤&#xff1a;process_request与process_response方法process_view方法process_exceptionprocess_template_response&#xff08;不常用&#xff09; 四、CSRF_…...

ROS机械臂集成六维力传感器的Gazebo仿真实践

1. 六维力传感器与Gazebo仿真基础 六维力传感器是机器人领域的重要感知器件&#xff0c;能够同时测量三个方向的力和三个方向的力矩。在机械臂应用中&#xff0c;它通常被安装在末端执行器附近&#xff0c;用于实现力控操作、碰撞检测等高级功能。Gazebo作为ROS生态中最常用的物…...

如何用Audiveris将纸质乐谱转换为数字音乐?5步搞定专业级音乐识别

如何用Audiveris将纸质乐谱转换为数字音乐&#xff1f;5步搞定专业级音乐识别 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 你是否曾面对一叠泛黄的纸质乐谱感到束手无策&#xff1f;…...

django-activity-stream扩展开发:自定义活动处理器与信号机制

django-activity-stream扩展开发&#xff1a;自定义活动处理器与信号机制 【免费下载链接】django-activity-stream Generate generic activity streams from the actions on your site. Users can follow any actors activities for personalized streams. 项目地址: https:…...

LCD1602液晶显示屏指令实战指南:从基础到应用

1. LCD1602液晶显示屏基础入门 第一次接触LCD1602时&#xff0c;我完全被它简洁的外观和强大的功能吸引了。这块只有巴掌大小的屏幕&#xff0c;却能清晰显示32个字符&#xff0c;特别适合嵌入式系统的信息展示需求。记得当时为了在Arduino项目上显示温湿度数据&#xff0c;我毫…...

训医疗大模型卡脖子?我们备了 3.25PB 三甲合规成品数据集,可直接用于模型训练

做医疗 AI、药械研发、临床科研的同行&#xff0c;大概率都懂这种普遍的行业痛点&#xff1a;磨了很久的算法、堆了充足的算力&#xff0c;结果医疗大模型一到真实临床场景就 “水土不服”&#xff0c;诊断准确率、临床适配性始终上不去&#xff1b;新药、新器械研发卡在真实世…...

Webcamoid虚拟摄像头功能详解:如何在视频会议中应用特效

Webcamoid虚拟摄像头功能详解&#xff1a;如何在视频会议中应用特效 【免费下载链接】webcamoid Webcamoid is a full featured and multiplatform camera suite. 项目地址: https://gitcode.com/gh_mirrors/we/webcamoid Webcamoid是一款功能全面的跨平台摄像头套件&am…...

事件抽取:触发词检测、论元角色填充与篇章级事件理解

点击 “AladdinEdu&#xff0c;你的AI学习实践工作坊”&#xff0c;注册即送-H卡级别算力&#xff0c;沉浸式云原生集成开发环境&#xff0c;80G大显存多卡并行&#xff0c;按量弹性计费&#xff0c;教育用户更享超低价。 一、引言 在人类语言所传递的信息中&#xff0c;事件处…...

[FPGA]Spartan6 Uart固定波特率读写JY901P惯导模块

这版本是固定波特率&#xff0c;无法修改串口波特率&#xff0c;无法恢复出厂设置&#xff08;出厂设置会更改波特率到9600&#xff0c;除非固定波特率一开始设置为9600&#xff0c;其他写命令都可以成功写入&#xff09;。 1. JY901P交互协议 这个是JY901P惯导模块串口的交互…...

celery-redis异步任务具体应用

Celery Redis 异步任务队列实战指南 本文以商城项目为例&#xff0c;深入讲解 Celery Redis 异步任务队列的架构设计与实现细节&#xff0c;并分析为何选择 Redis 而非 RabbitMQ 作为消息代理。 一、什么是异步任务队列&#xff1f; 在 Web 应用开发中&#xff0c;某些操作耗…...

FPGA以太网调试笔记:避开SGMII+GTX配置里的两个‘坑’(MDIO与多端口时钟)

FPGA以太网调试实战&#xff1a;破解SGMIIGTX配置中的MDIO与时钟难题 调试FPGA以太网接口时&#xff0c;SGMII与GTX的配置往往成为工程师的"拦路虎"。我曾在一个四端口千兆以太网项目中&#xff0c;连续48小时被两个看似简单的问题困扰&#xff1a;MDIO配置导致的链路…...