UE5 C++(七)— UObject、UGameInstance实例化

文章目录

  • UObject实例化
    • 创建一个MyObject类
    • 在Default Pawn Class 中实现
    • MyObject中参数调用
  • UGameInstance实例化
    • 创建GameInstance

UObject实例化

创建一个MyObject类

在这里插入图片描述
在这里插入图片描述

在Default Pawn Class 中实现

注意:要实现运行时调用可在这里提前配置,具体参考之前文章
在这里插入图片描述

#include "MyObject.h"UCLASS()
class DEMO_API AMyPawn : public APawn
{GENERATED_BODY()public:// Sets default values for this pawn's propertiesAMyPawn();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:// Called every framevirtual void Tick(float DeltaTime) override;UPROPERTY(EditAnywhere)UMyObject *MyCustomObject;
};
// Called when the game starts or when spawned
void AMyPawn::BeginPlay()
{Super::BeginPlay();// 使用模板类TSubclassOf创建对象TSubclassOf<UMyObject> MyObjectClass = UMyObject::StaticClass();MyCustomObject = NewObject<UMyObject>(GetWorld(), MyObjectClass);if (MyCustomObject){UE_LOG(LogTemp, Warning, TEXT("MyCustomObject is %s"),*MyCustomObject->GetName());}
}

点击运行,打印日志
在这里插入图片描述

MyObject中参数调用

//构造函数
FDateTableStruct();
ublic:// 隐式创建并调用无参构造器// 隐式创建方式在进程虚拟地址空间中的栈中分配内存,它的分配和释放由系统决定,// 函数内局部变量的存储单元可以在栈上创建,函数执行完毕,系统会自动释放这些存储单元。UPROPERTY()FDateTableStruct MyDateTableStruct;// 显式创建并调用无参构造器// 这种创建方式和第一种一样,在进程虚拟地址空间中的栈中分配内存,// 它的分配和释放由系统决定,函数内局部变量的存储单元可以在栈上创建,函数执行完毕,系统会自动释放这些存储单元。// FDateTableStruct MyDateTableStruct = FDateTableStruct();

在MyObject.h中实现

#pragma once#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "UObject/NoExportTypes.h"
#include "MyObject.generated.h"USTRUCT(BlueprintType)
struct FDateTableStruct : public FTableRowBase
{GENERATED_USTRUCT_BODY()//构造函数FDateTableStruct();UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DateTableStruct")FString ID;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DateTableStruct")FString Name;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "DateTableStruct")int32 Age;
};/****/
UCLASS()
class DEMO_API UMyObject : public UObject
{GENERATED_BODY()public:// 隐式创建并调用无参构造器// 隐式创建方式在进程虚拟地址空间中的栈中分配内存,它的分配和释放由系统决定,// 函数内局部变量的存储单元可以在栈上创建,函数执行完毕,系统会自动释放这些存储单元。UPROPERTY()FDateTableStruct MyDateTableStruct;// 显式创建并调用无参构造器// 这种创建方式和第一种一样,在进程虚拟地址空间中的栈中分配内存,// 它的分配和释放由系统决定,函数内局部变量的存储单元可以在栈上创建,函数执行完毕,系统会自动释放这些存储单元。// FDateTableStruct MyDateTableStruct = FDateTableStruct();
};

在MyObject.cpp中实现

#include "MyObject.h"FDateTableStruct::FDateTableStruct()
{ID = "1001";Name = "Kurenai";Age = 18;
}

调用参数:

// Called when the game starts or when spawned
void AMyPawn::BeginPlay()
{Super::BeginPlay();// 使用模板类TSubclassOf创建对象TSubclassOf<UMyObject> MyObjectClass = UMyObject::StaticClass();MyCustomObject = NewObject<UMyObject>(GetWorld(), MyObjectClass);if (MyCustomObject){UE_LOG(LogTemp, Warning, TEXT("MyCustomObject is %s"), *MyCustomObject->GetName());UE_LOG(LogTemp, Warning, TEXT("MyCustomObject  ID is %s"), *MyCustomObject->MyDateTableStruct.ID);UE_LOG(LogTemp, Warning, TEXT("MyCustomObject  Name is %s"), *MyCustomObject->MyDateTableStruct.Name);UE_LOG(LogTemp, Warning, TEXT("MyCustomObject  Age is %d"), MyCustomObject->MyDateTableStruct.Age);}
}

打印日志:
在这里插入图片描述

UGameInstance实例化

GameInstance是全局唯一单例,这个在引擎初始化的时候就已经生成,一直存在到引擎关闭。
主要用于为游戏保存全局临时数据,想要持久化保存需要用SaveGame。

创建GameInstance

在这里插入图片描述
UMyGameInstance.h

#pragma once#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "MyGameInstance.generated.h"/****/
UCLASS()
class DEMO_API UMyGameInstance : public UGameInstance
{GENERATED_BODY()public:
//构造函数UMyGameInstance();//添加数据成员UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyGameInstance")FString AppID;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyGameInstance")FString AppKey;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyGameInstance")FString AppName;UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyGameInstance")FString AppVersion;
};

UMyGameInstance.cpp

#include "MyGameInstance.h"UMyGameInstance::UMyGameInstance()
{AppID = "123456789";AppKey = "qwertyuiop";AppName = "MyGame";AppVersion = "1.0.0";
}

在MyPawn中调用

#include "MyGameInstance.h"UCLASS()
class DEMO_API AMyPawn : public APawn
{GENERATED_BODY()public:// Sets default values for this pawn's propertiesAMyPawn();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:UPROPERTY()UMyGameInstance *MyGameInstance;
};
// Called when the game starts or when spawned
void AMyPawn::BeginPlay()
{Super::BeginPlay();MyGameInstance = Cast<UMyGameInstance>(GetWorld()->GetFirstPlayerController()->GetGameInstance());if (MyGameInstance){UE_LOG(LogTemp, Warning, TEXT("MyGameInstance AppName is %s"), *MyGameInstance->AppName);UE_LOG(LogTemp, Warning, TEXT("MyGameInstance AppID is %s"), *MyGameInstance->AppID);UE_LOG(LogTemp, Warning, TEXT("MyGameInstance AppKey is %s"), *MyGameInstance->AppKey);UE_LOG(LogTemp, Warning, TEXT("MyGameInstance AppVersion is %s"), *MyGameInstance->AppVersion);}
}

编译后,在项目设置中配置

在这里插入图片描述
输出日志:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285824.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣14题-最长公共前缀[简单]

题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl" 示例 2&am…

spring之面向切面:AOP(2)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

一文详细介绍Ehcache

title: Ehcache 快速入门 categories: 编程 Java 中间件 缓存 tags: Java 中间件 缓存 Ehcache abbrlink: 2720adf1 date: 2022-02-17 22:34:30 permalink: /pages/c4647d/ Ehcache 快速入门 EhCache 是一个纯 Java 的进程内缓存框架&#xff0c;具有快速、精干等特点&#xff…

【mask转json】文件互转

mask图像转json文件 当只有mask图像时&#xff0c;可使用下面代码得到json文件 import cv2 import os import json import sysdef func(file:str) -> dict:png cv2.imread(file)gray cv2.cvtColor(png, cv2.COLOR_BGR2GRAY)_, binary cv2.threshold(gray,10,255,cv2.TH…

metabase filter

What’s this for? Variables in native queries let you dynamically replace values in your queries using filter widgets or through the URL. 本机查询中的变量允许您使用过滤器小部件或通过 URL 动态替换查询中的值。 Variables {{variable_name}} creates a variable…

后端低代码平台探索总结

业务需求快速变化的背景 我们在对业务需求进行梳理后&#xff0c;在进行程序设计时&#xff0c;对于将来可能发生变化的常量、变量、阀值、开关、条件、公式等等&#xff0c;可能会配置在环境变量或数字字典来支持可配置。但是需求变化往往会更加复杂、更加不可预测&#xff0…

Qt实现动画的2种方式

由于我之前是写java的所以在学习Qt的时候感觉会有点熟悉&#xff0c;因为Qt就是 用c写&#xff0c;而java底层也是c实现的 先看效果&#xff1a; 一、使用QMovie 这种方式我目前是用来加载gif图的&#xff0c;很简单噢&#xff0c;只不过我是加载的本地的路径&#xff0c;如…

减速机振动相关标准 - 笔记

参考标准&#xff1a;国家标准|GB/T 39523-2020 减速机的振动标准与发动机不同&#xff0c;摘引&#xff1a; 原始加速度传感器波形 可以明显看到调幅波 它的驱动电机是300Hz~2000Hz范围的。这个采样时间是5秒&#xff0c;看分辨率至少1024线。可分出500条谱线。 频谱部分 …

持续集成交付CICD:基于 GitLabCI 与 JenkinsCD 实现后端项目发布

目录 一、实验 1. GitLabCI环境设置 2.优化GitLabCI共享库代码 3.JenkinsCD 发布后端项目 4.再次优化GitLabCI共享库代码 5.JenkinsCD 再次发布后端项目 一、实验 1. GitLabCI环境设置 &#xff08;1&#xff09;GitLab给后端项目添加CI配置路径 &#xff08;2&#xf…

ElementUI,修改el-cascader的默认样式

Element UI 中的下拉弹窗是通过在整个body标签末尾动态添加div实现的&#xff0c;所以修改样式时&#xff0c;必须要定义全局样式才能实现样式覆盖&#xff0c;那怎样才能避免全局的样式污染呢&#xff1f; 解决办法&#xff1a;通过给组件添加自定义的 popper-class 属性来避…

Mysql查询使用group_concat函数后,如果查询无结果,仍会返回一条空数据

1、在查询中使用了group_concat 函数&#xff0c;简单例子如下&#xff1a; select GROUP_CONCAT(recordid) from s_au_user where username 121212此sql查询一个username 为121212的数据&#xff0c;当然肯定是查询不到的&#xff0c;理论上应该返回0条结果&#xff0c;但是…

(c语言)字符逆序——非递归

#include<stdio.h> #include<string.h> int main(int argc, char* argv[]) {char a[10000];char b[10000];gets(a);int i, c;c (int)strlen(a);for (i 0; i < c; i){b[i] a[c-i-1]; //将\0之前的元素赋值给b[]}b[c] \0; //之后在所有元素后加上\0,将…