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 的简单使用的更多相关文章

  1. <转载> UE4的Actor类C++简单尝试

    原文链接:   简书小小酥XX https://www.jianshu.com/p/2bcc80f0e789 一开始我用了一段时间UE4,发现如果用蓝图系统真的不太适合我的风格.因为之前一直都是用Un ...

  2. UE4中的AI行为树简单介绍

    UE4引擎中可以实现简单AI的方式有很多,行为树是其中比较常用也很实用的AI控制方式,在官网的学习文档中也有最简单的目标跟踪AI操作教程,笔者在这里只作简单介绍. AIController->和 ...

  3. 【UE4 C++ 基础知识】<8> Delegate 委托

    概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到 ...

  4. 从Unity引擎过度到Unreal4引擎(最终版)

    原文地址:http://demo.netfoucs.com/u011707076/article/details/44036839 前言 寒假回家到现在已经有十多天了,这些天回家不是睡就是吃....哎 ...

  5. Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)

    游戏摄像头可以观察到的距离越近,作用和拉远是一个比较普遍的要求,UE4它也实现比较简单. 在这篇文章中TopDown模板案例,解释如何,分步实施能Zoom摄像头. 创建TopDown模板C++项目达产 ...

  6. UE4简单AI

    首先做个小小的声明把,由于俺之前也没接触过AI ,所以有一些专业的词汇可能翻译存在各种问题,如果你发现的话,还是希望能够提出来哦,我们一起进步. 记住配合视频食用更佳哦~ 视频连接:http://ww ...

  7. UE4 距离场简单分析

    距离上一篇博客已经有点久了,中间忙的飞起,忽然发现很久没写了,这样不好,写一篇和工作无关的吧. 一直想搞清UE4距离场的原理,网上有几乎找不到任何有关UE4距离场实现的内容,加上上篇末说要写一个完全的 ...

  8. 【UE4 设计模式】简单工厂模式 Simple Factory Pattern

    概述 描述 又称为静态工厂方法 一般使用静态方法,根据参数的不同创建不同类的实例 套路 创建抽象产品类 : 创建具体产品类,继承抽象产品类: 创建工厂类,通过静态方法根据传入不同参数从而创建不同具体产 ...

  9. UE4 WCF RestFul 服务器 读取JSON 数据并解析 简单实例

    Note:不知道为什么通过Txt读取的JsonString,如果TXT 不是ANSI编码的话,会报JsonArrayStringToUStruct  Unable to parse. bool UWg ...

随机推荐

  1. 使用Mosquitto实现MQTT客服端C语言

      上一篇文章已经将mosquitto移植到了arm平台上,现在将使用mosquitto完成mqtt客服端的demo,了解过mqtt协议的小伙伴都知道,mqtt主要分为代理服务器.发布者.订阅者三部分 ...

  2. python-request 实现企业微信接口自动化-1(DDT)

    环境准备 python+requests 读取企业微信api开发文档,得知调用企业微信接口必须先获取企业微信的accesstoken是通过 ("corpid","&quo ...

  3. c# 递归树形菜单

    首先创建模型类Menus public class Menus { //菜单Id public int Id { get; set; } //菜单名 public string MenuName { ...

  4. MySQL实战45讲(06--10)-笔记

    目录 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍? 全局锁 表级锁 小结 07 | 行锁功过:怎么减少行锁对性能的影响? 死锁和死锁检测 08 | 事务到底是隔离的还是不隔离的? &quo ...

  5. vs2015使用tcmalloc(windows)

    编译lib库 1.https://github.com/gperftools/gperftools  去tag中下载了2.4版本(最新的2.9.1版本 用了c++17的新特性折叠表达式,vs2015不 ...

  6. Excel怎么把两个单元格中的文字合并到一个单元格中

    使用&符号,可以将字符串和单元格中的内容拼接起来

  7. Elasticsearch的基本使用

    1. 概述 之前聊了一下 Elasticsearch 的安装,今天我们来说说 Elasticsearch 的基本使用. 2. Elasticsearch索引的使用 索引(index)相当于是mysql ...

  8. Java面向对象系列(3)- 回顾方法的调用

    方法的调用 静态方法 非静态方法 形参和实参 值传递和引用传递 this关键字(继承篇讲解) 静态方法 非静态方法 形参和实参 package oop.demo01; public class Dem ...

  9. Docker系列(22)- DockerFile指令说明并构建自己的centos

    DockerFile常用指令 实战测试 DockerHub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建 #创建一个自己的centos # 1.编写D ...

  10. Typescript, ES6

    * typescript 中文文档 https://www.tslang.cn/docs/home.html * ECMAScript 6 入门 http://es6.ruanyifeng.com/# ...