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.mzph.cn/news/234284.shtml

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

相关文章

(数据结构)单链表的插入删除

代码实现 #include<stdio.h> #include<stdlib.h> typedef struct LNode {int data;struct LNode* next; }LNode, * LinkList; //创建头结点 LNode* InitList(LinkList L) {L (LNode*)malloc(sizeof(LNode));if (L NULL){printf("申请头结点失败\n");…

公共字段自动填充——后端

场景&#xff1a;当处理一些请求时&#xff0c;会重复的对数据库的某些字段进行赋值&#xff08;如&#xff1a;在插入和更新某个物品时&#xff0c;需要更新该物品的更新时间和更新者的信息&#xff09;&#xff0c;这样会导致代码冗余。 如&#xff1a; 思路&#xff1a; 自…

【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 组合总和1 class So…

脉冲水表计量方法有哪些?

随着社会的发展和人们对资源的需求不断增长&#xff0c;水资源的有效利用显得尤为重要。而水表作为测量家庭和工业用水的关键设备&#xff0c;其准确性和稳定性对于水资源管理至关重要。本文将重点介绍水表脉冲数计量方法&#xff0c;以帮助读者更好地理解和应用水资源。 一、机…

vue3项目引入电子签名(可横屏竖屏)

实现效果&#xff1a;&#xff08;左边横屏&#xff0c;右边竖屏&#xff09; 前言&#xff1a;【使用开源项目smooth-signature 实现签名的功能。Gitee 地址是 &#xff1a;GitHub - linjc/smooth-signature: H5带笔锋手写签名&#xff0c;支持PC端和移动端&#xff0c;任何前…

【超图】SuperMap iClient3D for WebGL/WebGPU ——地形影像

作者&#xff1a;taco 号外&#xff01;号外&#xff01;开新坑了&#xff01;开新坑了&#xff01;对于一个代码小白来讲&#xff0c;设置可能是刚接触开发的人&#xff08;还没接触准备接触&#xff09;的人来说。对于读代码或是在对产品的使用上会存在许许多多的疑惑。接下来…

Ansible(一)

Ansible: 远程操作主机功能&#xff1a; 自动化运维&#xff08;playbook剧本YAML&#xff09; 是基于Python开发的配置管理应用部署攻具&#xff0c;在自动化运维当中&#xff0c;现在是异军突起 Ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c…

探索 MajicStudio:一款多功能视频编辑软件

一、产品简介 MajicStudio是一款基于人工智能的图片编辑与设计工具&#xff0c;拥有简洁的界面与丰富功能。采用深度学习和计算机视觉技术可以自动识别图片要素。 二、应用场景 MajicStudio的AI图像功能适用于多场景&#xff0c;包括艺术设计、电商、游戏和文创等场景。 三、…

【ranger】CDP环境 更新 ranger 权限策略会发生低概率丢失权限策略的解决方法

一、问题描述&#xff1a; 我们的 kafka 服务在更新&#xff08;添加&#xff09; ranger 权限时&#xff0c;会有极低的概率导致 MM2 同步服务报错&#xff0c;报错内容 Not Authorized。但是查看 ranger 权限是赋予的&#xff0c;并且很早配置的权限策略也会报错。 相关组件…

数据结构与算法-动态规划-地下城游戏

地下城游戏 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某…

DDR4 设计概述以及分析仿真案例(硬件学习)

引言&#xff1a;随着计算机&#xff0c;服务器的性能需求越来越高&#xff0c;DDR4开始应用在一些高端设计中&#xff0c;然而目前关于DDR4的资料非常少&#xff0c;尤其是针对SI(信号完整性)部分以及相关中文资料&#xff0c;另外一方面&#xff0c;DDR4的高速率非常容易引起…

SQL进阶理论篇(十四):CBO优化器是如何计算代价的?

文章目录 简介能调整的代价模型的参数有哪些&#xff1f;mysql.server_costmysql.engine_cost 如何修改这些代价参数&#xff1f;代价模型具体是如何计算的参考文献 简介 大部分RDBMS都支持基于代价的优化器CBO&#xff0c;但其实CBO仍然存在缺陷&#xff08;比如参数配置的不…

Xcode 恢复Discard Changes

当开发的时候&#xff0c;Discard All Changes后 文件的修改都被放弃了&#xff0c;怎么才可以撤销更改呢 Xcode和Git没有这个功能&#xff0c;Finder可以实现 首先我们先退出Xcode用TextEdit打开你想恢复的文件转到文件 > 还原到 > 浏览所有版本...选择你想恢复的版本即…

【Python-批量修改视频分辨率】

Python-批量修改视频分辨率 1 使用Python修改视频分辨率2 常见的视频编码格式2.1 等效的编码格式表示方式2.2 常见的编码格式 1 使用Python修改视频分辨率 首先拷贝视频文件并修改后缀&#xff0c;然后修改图片的分辨率&#xff0c;实现视频批量修改和转换。 import os impor…

3dmax怎么制作软装模型?

软装在室内设计中经常用到&#xff0c;很多人感觉很难&#xff0c;其实也有很多简单的方法&#xff0c;这里介绍一种软装的制作方法。 1、打开3dmax&#xff0c;创建一个切角长方体&#xff0c;对长方体的长和宽进行适当的分段。 2、将切角长方体转换成可编辑多边形。推荐&…

实战篇:一文讲清楚电商平台用户评价分析

01 明确问题 随着电商平台的成熟&#xff0c;如何提升用户体验、提高客户留存率也成为了电商平台关注的重点。而用户评价是最直观地能反应用户体验的指标。用户差评更是其中的重点&#xff0c;通过差评分析&#xff0c;可以寻找到平台目前存在的可能导致用户打出差评的因素&am…

聊聊CISP证书

文章目录 什么是CISP为什么要考这个证报考条件是什么没达到工作年限可不可以考必须要报班吗如何找培训机构培训机构能提供什么考试一般安排在什么时候学习多长时间可以考证多长时间出成绩&拿证必须要和自己工作关联吗考试注意事项怎么选择方向需要学的内容证书有效期多长时…

计算机网络-进阶

目录 易混淆物理层数据链路层网络层nat如何实现私有ip通信IP数据报 格式解析tcp 连接tcp流量控制滑动窗口拥塞控制 报文捕获 wireshark路由模拟器 enspcdn代理服务器 VS cdn VS web cache 计算机有了物理地址&#xff0c;为什么还要有ip地址&#xff1f;单播 多播 广播 传输层会…

基于AWD攻防对Web漏洞的研究

写在前面 Copyright © [2023] [Myon⁶]. All rights reserved. 基于awd攻防环境和xshell远程连接&#xff0c;配合kali linux渗透系统、蚁剑、D盾、河马、Seay代码审计系统等&#xff0c;演示现实中网站可能存在的漏洞&#xff0c;对网站进行漏洞扫描&#xff0c;渗透测…

【jvm从入门到实战】(九) 垃圾回收(2)-垃圾回收器

垃圾回收器是垃圾回收算法的具体实现。 由于垃圾回收器分为年轻代和老年代&#xff0c;除了G1之外其他垃圾回收器必须成对组合进行使用 垃圾回收器的组合使用关系图如下。 常用的组合如下: Serial&#xff08;新生代&#xff09; Serial Old&#xff08;老年代&#xff09; Pa…