Unreal DataTable使用

news/2024/11/17 4:51:24/

目的:在多个地方使用同一份结构体配置

C++定义结构体

USTRUCT(BlueprintType)
struct FXXX : public FTableRowBase
{GENERATED_BODY()UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "XXX")float XXX;
}

注意:

  • 类的元数据加上 BlueprintType
  • 继承 FTableRowBase
  • 需要编辑的参数加上 UPROPERTY 标签
  • 参数的元数据加上EditAnywhere, BlueprintReadWrite
  • Category 不能多层,例如 “A|B”

蓝图配置

新建DataTable:
在这里插入图片描述
选择你的结构体类型:
在这里插入图片描述
PS:选中某一行后直接F2就可以改名字了

蓝图使用

在这里插入图片描述

C++使用

内部存了从Name到结构体指针的Map,可以直接从Map拿完整的结构体

class UDataTable: public UObject
{TMap<FName, uint8*>		RowMap;virtual const TMap<FName, uint8*>& GetRowMap() const { return RowMap; }virtual const TMap<FName, uint8*>& GetRowMap() { return RowMap; }
}

蓝图的实现也是类似,在创建的时候选的类型信息,会被保存下来,蓝图就根据这个类型信息,调用UScriptStruct::CopyScriptStruct,获取一份数据的复制出来。

bool UDataTableFunctionLibrary::Generic_GetDataTableRowFromName(const UDataTable* Table, FName RowName, void* OutRowPtr)
{bool bFoundRow = false;if (OutRowPtr && Table){void* RowPtr = Table->FindRowUnchecked(RowName);if (RowPtr != nullptr){const UScriptStruct* StructType = Table->GetRowStruct();if (StructType != nullptr){StructType->CopyScriptStruct(OutRowPtr, RowPtr);bFoundRow = true;}}}return bFoundRow;
}

也可以使用 GetAllRows 和 FindRow 函数,ContextString 给空就好了


http://www.ppmy.cn/news/1022610.html

相关文章

js继承,闭包和css继承

JavaScript继承 继承是一种面向对象编程的重要概念&#xff0c;JavaScript中可以通过原型链实现继承。闭包是一种特殊的函数&#xff0c;它可以访问其外部函数作用域中的变量。 下面是一个使用原型链实现继承的示例代码&#xff1a; // 父类 function Animal(name) {this.na…

C++中四种不同的强制转换方式的区别

在C中&#xff0c;有四种不同的强制转换方式&#xff0c;它们分别是静态转换、动态转换、常量转换和重新解释转换。下面是每种转换的区别&#xff1a; 静态转换&#xff08;static_cast&#xff09; 静态转换是最常用的强制转换方式之一&#xff0c;可以在具有良好定义的类型之…

(贪心) 剑指 Offer 14- I. 剪绳子 ——【Leetcode每日一题】

❓剑指 Offer 14- I. 剪绳子 难度&#xff1a;中等 给你一根长度为 n 的绳子&#xff0c;请把绳子剪成整数长度的 m 段&#xff08;m、n都是整数&#xff0c;n > 1 并且 m > 1&#xff09;&#xff0c;每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m…

新零售智慧生态电商系统搭建,开源多用户商城系统开发(H5、Java)

搭建新零售智慧生态电商系统和开源多用户商城系统需要进行以下具体步骤&#xff1a; 1. 确定需求&#xff1a;首先明确系统的功能需求和技术要求&#xff0c;包括用户注册和登录、商品管理、购物车、订单管理、支付等功能。 2. 选择技术架构&#xff1a;确定使用的开发语言和…

VBA技术资料MF42:VBA_从Excel中上面的单元格复制公式

【分享成果&#xff0c;随喜正能量】唯有梦想才配让你不安&#xff0c;唯有行动才能解除你的不安.绳锯木断&#xff0c;水滴石穿。也许你现在做的事情很小&#xff0c;只要你能日积月累的坚持下去&#xff0c;才会发现意义非凡。所谓的成功&#xff0c;便是别人失败的时候你还在…

python操作数据库

python操作数据库 首先安装数据插件 pip install pymysqlfrom pymysql import Connection # 引入数据库第三方包# 创建链接 conn Connection(host"localhost", # 主机名ipport3306,user"root",# 用户名password"123456" # 密码 )print(con…

Android 13 MTK平台添加自定义按键,以及CTS问题解决

添加自定义按键流程 一般来说上层添加以下几处修改 驱动层的键值上报,让驱动处理好即可 frameworks / base/core/java/android/view/KeyEvent.java public static final int KEYCODE_DEMO_APP_4 = 304;/** add by songhui for fingerprint Key code */+ public static fina…

比较 Java 中的 ModelMapper 和 MapStruct:自动映射器的强大功能

了解如何在自动映射器 ModelMapper 和 MapStruct 之间进行选择&#xff0c;以提高生产力和可维护性&#xff0c;并减少数据映射中的错误。 在 Java 应用程序中&#xff0c; 数据映射 是一项常见任务&#xff0c;涉及将对象从一种类型转换为另一种类型。这个过程可能会变得复杂而…