【UE4 C++】 UDataAsset、UPrimaryDataAsset 的简单使用
UDataAsset 简介
- 用来存储数据,每一个DataAsset 都是一份数据
- 可以派生,系统自带派生 UPrimaryDataAsset 方便数据对象的加载和释放
- 可以引用其他的 UDataAsset
- 可以存储UObject 实例
- 可以BulkEdiit 批量编辑多个 UDataAsset
- 灵活配置数据,但不好管理大量的配置对象
- 方便配置树状组织数据,全局配置,数据对象集合
UDataAsset 简单使用
如果是单例的全局配置,可配置 static 方法来获取数据
可以配置普通数据、结构体、其他 UDataAsset 等
可以配置 资源软引用 用于加载
自定义 UDataAsset 派生类代码
USTRUCT(BlueprintType, Blueprintable)
struct FAttackInfo :public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FString Name ;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float Damage;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UAnimMontage* Montage;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
UParticleSystem* VFX;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
USoundBase* Sound;
};
class TIPS_API USympleDataAsset : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FAttackInfo AttackInfo;
//UFUNCTION(BlueprintPure, meta = (DisplayName = "SympleDataAsset"))
//static USympleDataAsset* Get();
};
调用数据
void ADataDriveActor::UseDataAsset(USympleDataAsset* SympleDataAsset)
{
if (SympleDataAsset)
{
const FAttackInfo& AttackInfo = SympleDataAsset->AttackInfo;
UE_LOG(LogTemp, Warning, TEXT(" Name:%s\n Damage:%f\n Montage:%s\n Sound:%s\n"),
*AttackInfo.Name, AttackInfo.Damage, *AttackInfo.Montage->GetName(), *AttackInfo.Sound->GetName());
}
}
编辑器创建和使用
UPrimaryDataAsset 简单使用
将上述代码改为继承 UPrimaryDataAsset 后,可以在蓝图使用
支持动态创建 UPrimaryDataAsset 资源
void USympleBPFunLib::CreateNewDataAsset(const FString PackagePath, const FString AssetName, const FAttackInfo& AttackInfo)
{
//创建package
UPackage* MyPackage = CreatePackage(nullptr, *PackagePath);
//创建Object
USympleDataAsset* SympleDataAsset = NewObject<USympleDataAsset>(MyPackage, USympleDataAsset::StaticClass(), *AssetName, EObjectFlags::RF_Public | RF_Standalone);
if (!SympleDataAsset)
{
return;
}
// 初始赋值,必要时可拷贝赋值
SympleDataAsset->AttackInfo = AttackInfo;//
// 创建资源
FAssetRegistryModule::AssetCreated(SympleDataAsset);
// 标记
SympleDataAsset->GetOutermost()->MarkPackageDirty();
}
参考
【UE4 C++】 UDataAsset、UPrimaryDataAsset 的简单使用的更多相关文章
- <转载> UE4的Actor类C++简单尝试
原文链接: 简书小小酥XX https://www.jianshu.com/p/2bcc80f0e789 一开始我用了一段时间UE4,发现如果用蓝图系统真的不太适合我的风格.因为之前一直都是用Un ...
- UE4中的AI行为树简单介绍
UE4引擎中可以实现简单AI的方式有很多,行为树是其中比较常用也很实用的AI控制方式,在官网的学习文档中也有最简单的目标跟踪AI操作教程,笔者在这里只作简单介绍. AIController->和 ...
- 【UE4 C++ 基础知识】<8> Delegate 委托
概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到 ...
- 从Unity引擎过度到Unreal4引擎(最终版)
原文地址:http://demo.netfoucs.com/u011707076/article/details/44036839 前言 寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎 ...
- Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)
游戏摄像头可以观察到的距离越近,作用和拉远是一个比较普遍的要求,UE4它也实现比较简单. 在这篇文章中TopDown模板案例,解释如何,分步实施能Zoom摄像头. 创建TopDown模板C++项目达产 ...
- UE4简单AI
首先做个小小的声明把,由于俺之前也没接触过AI ,所以有一些专业的词汇可能翻译存在各种问题,如果你发现的话,还是希望能够提出来哦,我们一起进步. 记住配合视频食用更佳哦~ 视频连接:http://ww ...
- UE4 距离场简单分析
距离上一篇博客已经有点久了,中间忙的飞起,忽然发现很久没写了,这样不好,写一篇和工作无关的吧. 一直想搞清UE4距离场的原理,网上有几乎找不到任何有关UE4距离场实现的内容,加上上篇末说要写一个完全的 ...
- 【UE4 设计模式】简单工厂模式 Simple Factory Pattern
概述 描述 又称为静态工厂方法 一般使用静态方法,根据参数的不同创建不同类的实例 套路 创建抽象产品类 : 创建具体产品类,继承抽象产品类: 创建工厂类,通过静态方法根据传入不同参数从而创建不同具体产 ...
- UE4 WCF RestFul 服务器 读取JSON 数据并解析 简单实例
Note:不知道为什么通过Txt读取的JsonString,如果TXT 不是ANSI编码的话,会报JsonArrayStringToUStruct Unable to parse. bool UWg ...
随机推荐
- Mybatis-Plus增强包
简介 本框架(Gitee地址 )结合公司日常业务场景,对Mybatis-Plus 做了进一步的拓展封装,即保留MP原功能,又添加更多有用便捷的功能.具体拓展体现在数据自动填充(类似JPA中的审计).关 ...
- 前端搭建Linux云服务器,Nginx配置详解及部署自己项目到服务器上
目录 搭建Linux云服务器 购买与基本配置 链接linux服务器 目录结构 基本命令 软件安装 Linux 系统启动 启动过程 运行级别 Nginx详解 1.安装 方式一:yum安装 方式二:自定义 ...
- Django的form组件——ModelForm实战
模型: from django.db import models class Book(models.Model): book_name = models.CharField(max_length=3 ...
- Python - 通过PyYaml库操作YAML文件
PyYaml简单介绍 Python的PyYAML模块是Python的YAML解析器和生成器 它有个版本分水岭,就是5.1 读取YAML5.1之前的读取方法 def read_yaml(self, pa ...
- SpringMVC基于注解开发
一. 1.配置 适配器的作用就是规定怎么调控制器: 2.使用 controller代码 三.
- 一文读懂Redis
目录结构如下: 简介 Redis是一个高性能的key-value数据库.Redis对数据的操作都是原子性的. 优缺点 优点: 基于内存操作,内存读写速度快. Redis是单线程的,避免线程切换开销及多 ...
- Vue开发多人聊天室 复盘总结
前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...
- Windows Server 2022 OVF(SLIC 2.6)
请访问原文链接:https://sysin.org/blog/windows-server-2022-ovf/,查看最新版.原创作品,转载请保留出处. 作者:gc(at)sysin.org,主页:ww ...
- 使用GitHub Pages + docsify快速搭建一个站点
话不多说,先看效果: https://bytesfly.github.io/blog 为什么需要一个站点 肯定有人会问,既然有类似 博客园 这样优秀的平台来写博客,为什么还需要自己搭建站点呢? 放在G ...
- Ebiten-纯Golang开发的跨平台游戏引擎
Go语言不是让你玩的啊喂! 昨天跟好基友聊开发的事,他说他等着闲下来的时候就用PYGame写个像那个最近挺火的"文X游X"一样的游戏.(没收广告费啊!) 基友突然嘲笑我:" ...