【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 反射类型(开个临时的 Lua VM 即可)直接像 -- define a uenum in lua UEnum.EEnumGuestSomethingElse {Value1 1;Value2 2; }-- use it like a native …...
react的开发中关于图片的知识
React是一个流行的JavaScript库,用于构建用户界面。在React开发中,图片是一个非常重要的元素,可以用于美化界面和展示内容。本篇博客将详细讲解React中关于图片的知识。 1. React中使用图片 在React中使用图片非常简单,只需要使…...
AcWing 188:武士风度的牛 ← BFS
【题目来源】https://www.acwing.com/problem/content/190/ 【题目描述】 农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛。 这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法&…...
马养殖场建设VR模拟实训教学平台具有灵活性和复用性
为保障养殖场生物安全,避免疫病传播,学生出入养殖场受时间和地域的限制, 生产实习多以参观为主,通过畜牧企业技术人员的讲解,学生被动了解生产过程。为了解决畜牧养殖实训难的问题,借助VR技术开展畜牧养殖虚…...
云原生技术演进之路-(云技术如何一步步演进的,云原生解决了什么问题?)
云技术如何一步步演进的? 云原生解决了什么问题? 物理设备 电脑刚被发明的时候,还没有网络,每个电脑(PC),就是一个单机。 这台单机,包括CPU、内存、硬盘、显卡等硬件。用户在单机…...
基于OGG实现Oracle实时同步MySQL
📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...
〖大前端 - 基础入门三大核心之JS篇㊷〗- DOM事件对象及它的属性
说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作…...
如何搭建zerotier服务器组网实现内网穿透
小白花了四天的下班时间终于把zerotier网络调通,此刻坐在桌前舒畅地喝口茶~~ 下面来详细记录下这几天踩的坑: 起因就在于一直在iPad上用向日葵连接公司电脑的我觉得向日葵的界面用的实在难受,vs code操作十分不灵光&…...
【C++】构造函数和析构函数第四部分(深拷贝和浅拷贝)--- 2023.11.25
目录 什么是浅拷贝?浅拷贝的问题使用深拷贝解决浅拷贝问题结束语 什么是浅拷贝? 如果在一个类中没有人为定义拷贝函数,则系统会提供默认拷贝函数。那么在此默认拷贝函数中主要进行了简单的赋值操作,那这个简单的赋值操作我们一般…...
加速软件开发:自动化测试在持续集成中的重要作用!
持续集成的自动化测试 如今互联网软件的开发、测试和发布,已经形成了一套非常标准的流程,最重要的组成部分就是持续集成(Continuous integration,简称CI,目前主要的持续集成系统是Jenkins)。 那么什么是持…...
工具及方法 - 查找排名:国内网络作家排名
中国十大网络小说作家排名,在买购网的排名: 中国十大网络小说作家 网络小说作家排行榜 中国著名网络写手排名→MAIGOO生活榜 (这个网站里还有很多其他的排名。) 1,唐家三少 2,辰东 3,我吃西红…...
MySQL INSERT插入条件判断:如果不存在则插入
MySQL INSERT插入条件判断:如果不存在则插入(转) 我们经常需要进行sql的批量插入,要求:该条记录不存在则插入,存在则不插入。如果使用一条INSERT语句实现呢? ####普通的 INSERT INTO 插入&…...
CSM32RV003:国产高精度16位ADC低功耗RISC-V内核MCU
目录 高精度ADC工业应用工业数据采集应用CSM32RV003简介主要特性 高精度ADC工业应用 高精度ADC即高精度模数转换器,是一种能够将输入模拟信号转换为数字信号的芯片,在多种消费电子、工业、医疗和科研领域都有广泛应用。高精度ADC的主要特点是能够提供高…...
65道常问前端面试题总结react
面试题总结 一.Axios的实现原理 Axios 是一个基于 Promise 的 HTTP 客户端库,用于浏览器和 Node.js 环境。它可以发送 HTTP 请求并处理响应数据。下面是 Axios 实现的基本原理: 封装请求:Axios 提供了一个简单易用的 API,使得开…...
单片机学习1——点亮一个LED灯
Keil软件编写程序: 特殊功能寄存器声明: #include<reg52.h>sbit LED P1^0;void main() {LED 0;while(1); } 代码说明: sbit 语句是特殊功能位声明。 生成HEX文件,这个文件是下载到单片机里的文件。Options for Target…...
PyCharm 配置sqlite3驱动下载问题
单击View -> Tool Windows -> Database,打开Database窗体,之后进行配置,下载驱动包失败! 解决 (1)下载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新品并没有太吸引我注意,因为它还是PCIe 3.0接口的,要知道Intel的PCIe 4.0 SSD都已经推出了。 但上面这个NVMe-oF(NVMe over Fabric)EBOF(区别于普通JBO…...
visual studio 下的git
我这个是看视频笔记 YouTube : https://www.youtube.com/watch?vgkDASVE_Hdg 主要内容是:建立git 库, 保存commit, 建立分支 create branch, 合并分支merge branch,比较 diff,Revert ,history,delete branch, rename branch, t…...
[架构之路-249]:目标系统 - 设计方法 - 软件工程 - 需求工程- 需求开发:如何用图形表达需求,结构化方法的需求分析
目录 一、概述 二、数据模型:E-R图/实体关系图(数据单元之间的结构关系) 三、功能模型:数据流图DFD(逻辑运算,包括输入和输出,实体之间的关系):输入》处理 》 输出 四…...
Django之中间件与CSRF_TOKEN
文章目录 一、什么是中间件二、中间件有什么用三、Django自定义中间件中间件中主要方法及作用创建自定义中间件的步骤:process_request与process_response方法process_view方法process_exceptionprocess_template_response(不常用) 四、CSRF_…...
ROS机械臂集成六维力传感器的Gazebo仿真实践
1. 六维力传感器与Gazebo仿真基础 六维力传感器是机器人领域的重要感知器件,能够同时测量三个方向的力和三个方向的力矩。在机械臂应用中,它通常被安装在末端执行器附近,用于实现力控操作、碰撞检测等高级功能。Gazebo作为ROS生态中最常用的物…...
如何用Audiveris将纸质乐谱转换为数字音乐?5步搞定专业级音乐识别
如何用Audiveris将纸质乐谱转换为数字音乐?5步搞定专业级音乐识别 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 你是否曾面对一叠泛黄的纸质乐谱感到束手无策?…...
django-activity-stream扩展开发:自定义活动处理器与信号机制
django-activity-stream扩展开发:自定义活动处理器与信号机制 【免费下载链接】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时,我完全被它简洁的外观和强大的功能吸引了。这块只有巴掌大小的屏幕,却能清晰显示32个字符,特别适合嵌入式系统的信息展示需求。记得当时为了在Arduino项目上显示温湿度数据,我毫…...
训医疗大模型卡脖子?我们备了 3.25PB 三甲合规成品数据集,可直接用于模型训练
做医疗 AI、药械研发、临床科研的同行,大概率都懂这种普遍的行业痛点:磨了很久的算法、堆了充足的算力,结果医疗大模型一到真实临床场景就 “水土不服”,诊断准确率、临床适配性始终上不去;新药、新器械研发卡在真实世…...
Webcamoid虚拟摄像头功能详解:如何在视频会议中应用特效
Webcamoid虚拟摄像头功能详解:如何在视频会议中应用特效 【免费下载链接】webcamoid Webcamoid is a full featured and multiplatform camera suite. 项目地址: https://gitcode.com/gh_mirrors/we/webcamoid Webcamoid是一款功能全面的跨平台摄像头套件&am…...
事件抽取:触发词检测、论元角色填充与篇章级事件理解
点击 “AladdinEdu,你的AI学习实践工作坊”,注册即送-H卡级别算力,沉浸式云原生集成开发环境,80G大显存多卡并行,按量弹性计费,教育用户更享超低价。 一、引言 在人类语言所传递的信息中,事件处…...
[FPGA]Spartan6 Uart固定波特率读写JY901P惯导模块
这版本是固定波特率,无法修改串口波特率,无法恢复出厂设置(出厂设置会更改波特率到9600,除非固定波特率一开始设置为9600,其他写命令都可以成功写入)。 1. JY901P交互协议 这个是JY901P惯导模块串口的交互…...
celery-redis异步任务具体应用
Celery Redis 异步任务队列实战指南 本文以商城项目为例,深入讲解 Celery Redis 异步任务队列的架构设计与实现细节,并分析为何选择 Redis 而非 RabbitMQ 作为消息代理。 一、什么是异步任务队列? 在 Web 应用开发中,某些操作耗…...
FPGA以太网调试笔记:避开SGMII+GTX配置里的两个‘坑’(MDIO与多端口时钟)
FPGA以太网调试实战:破解SGMIIGTX配置中的MDIO与时钟难题 调试FPGA以太网接口时,SGMII与GTX的配置往往成为工程师的"拦路虎"。我曾在一个四端口千兆以太网项目中,连续48小时被两个看似简单的问题困扰:MDIO配置导致的链路…...
