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

news2024/12/26 23:51:33

文章目录

  • 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 properties
	AMyPawn();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:
	// Called every frame
	virtual 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 properties
	AMyPawn();

protected:
	// Called when the game starts or when spawned
	virtual 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.coloradmin.cn/o/1321686.html

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

相关文章

Redis-网络模型

参考资料 &#xff1a;极客时间 Redis&#xff08;亚风&#xff09; 前置知识 系统隔离 为了避免⽤户应⽤导致冲突甚⾄内核崩溃&#xff0c;⽤户应⽤与内核是分离的&#xff1a; 进程的寻址空间会划分为两部分&#xff1a;内核空间、⽤户空间 • ⽤户空间只能执⾏受限的命令&…

sql服务无法启动 请键入net helpmsg 3534

然后 如果是管理员权限打开命令行输入操作的话 先清空 MySQL 下的 data 文件夹&#xff0c;然后确保系统环境变量中已经配置了 mysql 的 bin 目录到Path中&#xff0c;然后执行 sc delete mysql 得到 [SC] DeleteService 成功 后&#xff08;也可能不会有返回信息&#xff…

SpringBoot项目jar包加密防止反编译

业务场景 由于公司业务需要&#xff0c;需要把jar包部署到其它公司的服务器&#xff0c;又不想泄露源码。 解决方法 1、代码混淆 采用proguard-maven-plugin插件 在单模块中此方案还算简单&#xff0c;但是现在项目一般都是多模块&#xff0c;一个模块依赖多个公共模块。那…

flask搞个简单登录界面

登录界面 直接放上login.html模板&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Lo…

Airoha AB157x EVB 介绍

0 Preface/Foreword 常用词汇&#xff1a; baseband and radio for intentive stereo, mono, or TWS &#xff08;AiroStereo&#xff09; audio application. baseband:基带 TWS&#xff1a;AiroStereo Audio Transparency&#xff1a;AiroThru EVK: Evaluation Kit A…

中国90米分辨率可蚀性因子K数据

数据时间&#xff1a;2023年 数据空间位置&#xff1a;全国 数据空间分辨率&#xff1a;90m 数据坐标系&#xff1a;WGS1984 数据格式&#xff1a;tiff 数据来源&#xff1a;地球资源数据云平台(www.gis5g.com)&#xff0c;如需要请自行联系 数据简介&#xff1a;土壤可蚀…

JVM-10-类加载

Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这个过程被称作虚拟机的类加载机制。 一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载出内存为止&#…

强大的电子书阅读器:OmniReader Pro for mac

&#x1f50d; OmniReader Pro 是一款专为 Mac 设计的强大阅读工具&#xff0c;它能够帮助你更高效地阅读和处理各种文本内容。无论是电子书、新闻文章、网页文本还是文件资料&#xff0c;OmniReader Pro 都能胜任&#xff01; ✅ OmniReader Pro 提供了丰富的功能&#xff0c…

劲松中西医结合医院hpv诊疗中心建议:提高免疫力做好5件事

谭巍主任在近期的一次访谈中明确指出&#xff0c;免疫力是HPV最好的医生。他强调&#xff0c;提高免疫力是预防和治疗HPV的关键。通过科学的饮食和营养搭配&#xff0c;我们可以增强免疫力&#xff0c;有效抵抗病毒的侵袭。 首先&#xff0c;我们要明白什么是免疫力。免疫力是…

大创项目推荐 深度学习 opencv python 实现中国交通标志识别

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

1.3 什么是接口?什么是接口测试?

上一小节我们认识了C/S和B/S架构,那在B/S架构中,我们测试最常接触的,就是接口。本课程的重点是接口自动化测试,那同学们真的了解什么是接口吗?首先,我们从通俗的角度来看什么是接口。在计算机中,接口是计算机系统中两个独立的部件进行信息交换的共享边界。这种交换可以发…

Mac managing Multiple Python Versions With pyenv 【 mac pyenv 管理多个python 版本 】

文章目录 1. 简介2. 安装2.1 brew 安装 pyenv2.2 脚本安装 3. pyenv 安装 Python4. 卸载 python5. 管理 python 1. 简介 Pyenv 是一个用于管理和切换多个 Python 版本的工具。它允许开发人员在同一台计算机上同时安装和使用多个不同的 Python 版本&#xff0c;而无需对系统进行…

基于SSM的婚恋网站的设计与实现论文

基于SSM的婚恋网站的设计与实现 摘要 随着信息互联网购物的飞速发展&#xff0c;一般企业都去创建属于自己的管理系统。本文介绍了基于SSM的婚恋网站的设计与实现的开发全过程。通过分析企业对于基于SSM的婚恋网站的设计与实现的需求&#xff0c;创建了一个计算机管理基于SSM…

力扣刷题记录(15)LeetCode:509、70、746

目录 509.斐波那契数 70.爬楼梯 746.使用最小花费爬楼梯 总结 ​​​​​​ 用一个数组来存储前两个数的值&#xff0c;然后根据前两个数的值来确定当前的值。 class Solution { public:int fib(int n) {if(n<2) return n;vector<int> v;v.push_back(0);v.push…

【深度学习目标检测】九、基于yolov5的路标识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

大模型(LLM)+词槽(slot)构建动态场景多轮对话系统

构建动态场景多轮对话系统 引言 在人工智能和自然语言处理领域&#xff0c;聊天机器人的开发一直是一个热点话题。近年来&#xff0c;随着大型语言模型&#xff08;LLM&#xff09;的进步&#xff0c;构建能够理解和响应各种用户需求的聊天机器人变得更加可行和强大。本文将介…

python识别增强静脉清晰度 opencv-python图像处理案例

一.任务说明 用python实现静脉清晰度提升。 二.代码实现 import cv2 import numpy as npdef enhance_blood_vessels(image):# 调整图像对比度和亮度enhanced_image cv2.convertScaleAbs(image, alpha0.5, beta100)# 应用CLAHE&#xff08;对比度受限的自适应直方图均衡化&am…

万能在线答题考试小程序源码系统 网课必备 既能刷题又能考试 附带完整的搭建教程

在当前的数字化时代&#xff0c;移动应用程序已经成为人们日常生活的重要组成部分。其中&#xff0c;小程序因其无需下载、即用即走的特性&#xff0c;备受用户青睐。现如今&#xff0c;将在线答题考试功能集成到小程序中&#xff0c;可以极大地提高学习者的学习效率和兴趣。 …

历时两个月,我终于研究透外卖红包是怎么一回事

近几年&#xff0c;推广外卖红包爆火&#xff0c;各种推广外卖红包的公众号层出不穷。于是&#xff0c;我就在想外卖红包究竟是怎么一回事。就这样&#xff0c;我带着问题开始了关于外卖红包的研究。 在研究的过程中&#xff0c;我开始了解隐藏优惠券、cps等一系列相关的术语。…

rabbitmq界面主要参数分析

本篇主要分析rabbitmq broker界面参数 rabbitmq界面主要参数分析 1、connections User Name: user - 连接所使用的用户名。 State: running - 连接当前的状态&#xff0c;这里表明连接是活动的。 SSL/TLS: ○ - 表示这个连接没有使用SSL/TLS加密。 内部或受信任的网络中可能…