当前位置: 首页 > news >正文

UE4 中可全局获取的变量(例如游戏实例、玩家控制器等) 详解

目录

  • 0 引言
  • 1 全局对象(全局变量)
    • 1.1 游戏实例 GameInstance
      • 1.1.1 介绍
      • 1.1.2 使用 GameInstance
    • 1.2 玩家控制器 PlayerController
    • 1.3 游戏世界类 UWorld

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:UE虚幻引擎专栏
  • 💥 标题:UE4 中可全局获取的变量(例如游戏实例、玩家控制器、游戏模式等) 详解
  • ❣️ 寄语:加油,一次专注一件事!
  • 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。

0 引言

在游戏开发过程中,有一些变量经常需要被别的蓝图调用,但是这个变量又不是全局变量。所以使用前需要通过Get Actor Of Class(获取类的actor)的方式获取对象的引用。但是假如我们将经常需要用到的变量存储在全局对象当中,下次别人要调用就直接通过这个全局对象来访问这个变量。

1 全局对象(全局变量)

🎈对象其实也是一种变量,所以全局对象也可以叫做全局变量🎈

在UE4中,有一些全局可获取的变量,可以方便地访问和管理游戏的各个方面。

  • GameInstance 游戏实例
  • GameViewportClient 游戏视口客户端
  • UWorld 游戏世界
  • GameModeBase 游戏模式
  • PlayerController 玩家控制器
  • Actor 演员

通过这些全局变量,开发者可以方便地访问和管理游戏的不同方面,从而实现更灵活和高效的游戏逻辑和交互操作。

拓展:在UE4切换关卡时,下面这些全局变量不会被释放:

  • GameInstance 游戏实例:游戏实例中的数据将在切换关卡时保留,以便在下一个关卡中继续使用。
  • PlayerController 玩家控制器:玩家控制器是负责玩家输入和控制的对象,它们在切换关卡时通常会保持不变。
  • GameModeBase 游戏模式:游戏模式定义了游戏的规则和逻辑,它们在切换关卡时通常会保持不变。
  • 主角色(APawn、ACharacter):游戏中主角的演员(Actor)通常会在切换关卡时保持不变。
  • 关卡关联的演员(Actor):如果某个actor在关卡编辑器中被直接放置在关卡中,那么在切换关卡时它们通常会保持不变。下图所示,每个actor都有自己所属的关卡
    在这里插入图片描述

需要注意的是,不会被释放的变量只是在切换关卡时会保持不变,但在游戏结束或重新加载游戏时可能会被重置或释放。此外,其他不直接与特定关卡和角色关联的全局变量也可以在切换关卡时保持不变,如全局的游戏配置、游戏状态等。

1.1 游戏实例 GameInstance

1.1.1 介绍

UGameInstance:游戏实例,它负责保存和共享游戏的全局数据和状态。可以在项目中创建自定义的UGameInstance子类,通过GetGameInstance函数获取当前的游戏实例,并使用其中的变量来存储和访问全局数据

GameInstance是UE4中的全局类,只有一个实例(就像是单例设计模式,只有一个对象)

GameInstance常用的函数与用法

  • Event Init(事件初始)与 Event Shutdown(事件关闭),引擎初始化与关闭时执行的逻辑。
    在这里插入图片描述

  • 为游戏保存全局数据:比如上一个关卡的信息需要在下一个关卡使用时;只是临时数据,游戏结束则消失;则可以将这些临时数据保存在GameInstance中。(假如需要持久保存数据需要用SaveGame,也就是将数据存储到磁盘中)

1.1.2 使用 GameInstance

  1. 首先新建蓝图类继承 GameInstance 基类
    在这里插入图片描述
  2. 在项目设置中配置游戏实例类为我们刚才新建的游戏实例类即可。(不配置的话游戏运行还是使用的默认的类)
    在这里插入图片描述
  3. 在其他蓝图类中获取游戏实例对象
    在这里插入图片描述

深入思考:通过获取游戏实例得到的其实是父类的指针(应该是父类指针指向子类对象),但是使用父类指针是访问不了子类中特有的函数的,所以就需要进行类型转换(UE的类型转换在C++中对应的就是static_cast、dynamic_cast等类型转换函数)。
这是一种抽象编程的思想,假如【获取游戏实例】函数获取的不是父类指针,而是直接获取对应的子类指针,而且我们也不知道未来会有多少子类被定义。不能新定义一个子类,我们就去修改【获取游戏实例】函数的源码,很显然这种程序设计思想太垃圾了。

1.2 玩家控制器 PlayerController

玩家控制器 和 GameInstance 使用方法很类似
它也可以通过【获取玩家控制器】函数获取父类指针,然后类型转换为子类类型之后就可以使用功能。

使用步骤:

  1. 新建一个子类派生于 PlayerController
    在这里插入图片描述
  2. 设置【项目设置中】选择新建的玩家控制器类(首先得新建一个游戏模式的子类,才能选择玩家控制器类)
    在这里插入图片描述
  3. 使用
    在这里插入图片描述

1.3 游戏世界类 UWorld

在UE4中,UWorld是一个重要的类,代表了游戏世界的实例。它是一个容器,用于存储和管理游戏中所有的Actors(角色)和Objects(对象),并负责协调它们之间的交互和逻辑。

这部分内容了解的还不多,挖个坑,等学习熟练之后再将这部分内容补全。

相关文章:

UE4 中可全局获取的变量(例如游戏实例、玩家控制器等) 详解

目录 0 引言1 全局对象(全局变量)1.1 游戏实例 GameInstance1.1.1 介绍1.1.2 使用 GameInstance 1.2 玩家控制器 PlayerController1.3 游戏世界类 UWorld 🙋‍♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏&…...

c#使用ExifLib库提取图像的相机型号、光圈、快门、iso、曝光时间、焦距信息等EXIF信息

近期公司组织了书画摄影比赛,本人作为摄影爱好者,平时也会拍些照片,这次比赛当然不能错过。为了提高获奖概率,选了19张图像作为参赛作品。但是,摄影作品要提交图像的光圈、曝光时间等参数。一两张还可以通过电脑自带软…...

C++入门05—指针

1. 指针的基本概念 指针的作用: 可以通过指针间接访问内存 内存编号是从0开始记录的,一般用十六进制数字表示 可以利用指针变量保存地址 2. 指针变量的定义和使用 指针变量定义语法: 数据类型 * 变量名; 示例: …...

Go学习第十六章——Gin文件上传与下载

Go web框架——Gin文件上传与下载 1. 文件上传1.1 入门案例(单文件)1.2 服务端保存文件的几种方式SaveUploadedFileCreateCopy 1.3 读取上传的文件1.4 多文件上传 2. 文件下载2.1 快速入门2.2 前后端模式下的文件下载2.3 中文乱码问题 1. 文件上传 1.1 …...

2.MySQL的调控按钮——启动选项和系统变量

2.MySQL的调控按钮——启动选项和系统变量 1.启动选项和配置文件1.1 在命令行上使用选项1.2 配置文件中使用选项1.2.1 配置文件路径1.2.2 配置文件的内容1.2.3 特定 MySQL 版本的专用选项组1.2.4 配置文件的优先级1.2.5 同一个配置文件中多个组的优先级1.2.6 defaults-file 的使…...

故障诊断模型 | Maltab实现CNN卷积神经网络故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现CNN卷积神经网络故障诊断 模型描述 卷积神经网络(convolutional neural network)是具有局部连接、权重共享等特性的深层前馈神经网络,最早主要是用来处理图像信息。 相比于全…...

qt高精度定时器的使用停止线程应用

##线程停止 //线程停止应用 public: explicit WorkerThread(QObject *parent 0) :QThread(parent), m_bStopped(false){qDebug() << "Worker Thread : " << QThread::currentThreadId();}~WorkerThread(){stop();quit();wait();}void stop() {qDebug()…...

Spring Boot Actuator 介绍

Spring Boot Actuator是什么 Spring Boot Actuator 模块提供了生产级别的功能&#xff0c;比如健康检查&#xff0c;审计&#xff0c;指标收集&#xff0c;HTTP 跟踪等&#xff0c;帮助我们监控和管理Spring Boot 应用。 这个模块是一个采集应用内部信息暴露给外部的模块&…...

【MATLAB】安装Psychtoolbox

目录 一、下载Psychtoolbox工具包 1. 一个是这个ZTP文件 2. 分别下载 Subversion 1.7.x command-line client 和 gstreamer.freedesktop.org 二、解压工具包&#xff0c;保存至同一文件 三、安装到matlab 1. 安装psychtoolbox 2. 检查是否安装成功 一、下载Psychtoolbox…...

【Python机器学习】零基础掌握GradientBoostingClassifier集成学习

什么能有效地解决分类问题,特别是在数据复杂、特征多样的情况下? 面对这个问题,许多人可能会想到复杂的神经网络或深度学习方法。然而,有一种称为“梯度提升分类器”(Gradient Boosting Classifier)的算法,以其高准确度、灵活性和易用性赢得了大量用户的青睐。 假设在…...

RFNet模型数据集采集处理流程

文章目录 cityscapes数据集内容如何标注数据得到标签图片 cityscapes数据集内容 训练模型的时候下载了cityscapes里的disparity、gtFine和leftImg8bit。 共5000张图片。2975张训练&#xff0c;500张验证&#xff0c;1525test。每个目录下都有train、test和val的子目录,这些子…...

sql-50练习题6-10

sql练习题6-10题 前言数据库表结构介绍学生表课程表成绩表教师表 0-6 查询"李"姓老师的数量0-7 查询学过"李四"老师授课的同学的信息0-8 查询没学过"李四"老师授课的同学的信息0-9 查询学过编号为"01"并且也学过编号为"02"的…...

【刷题宝典NO.1】

Nim游戏 https://leetcode.cn/problems/nim-game/description/ 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。 你们轮流进行自己的回合&#xff0c; 你作为先手 。 每一回合&#xff0c;轮到的人拿掉 1 - 3 块石头。 拿掉最后一块石头的人…...

如何在深度学习领域取得个人的成功

要在深度学习领域取得个人的成功&#xff0c;可以考虑以下建议&#xff1a; 学习深度学习的基础知识&#xff1a;首先&#xff0c;建立坚实的深度学习基础知识是非常重要的。你可以学习深度学习的基本概念、神经网络的原理、常用的深度学习框架&#xff08;如TensorFlow、PyTor…...

数据结构【DS】B树

m阶B树的核心特性: Q&#xff1a;根节点的子树数范围是多少&#xff1f;关键字数的范围是多少&#xff1f; A&#xff1a;根节点的子树数∈[2, m],关键字数∈[1, m-1]。 Q&#xff1a;其他结点的子树数范围是多少&#xff1f;关键字数范围是多少&#xff1f; Q&#xff1a;对任…...

Chatgpt网页版根据关键词自动批量写原创文章软件【可多开自动登录切换gpt账号】

Chatgpt网页版根据关键词自动批量写原创文章软件介绍&#xff1a; 1、需要放入GPT账号和密码放入在账号库.txt里&#xff0c;可以放入多组账号密码&#xff0c;账号切换轮流使用。 2、可以自定义回答指令&#xff0c;也可多个回答指令随机切换。 3、可以给关键词加双标题&…...

研发效能认证学员作品:快速进行持续集成应用实践丨IDCF

作者&#xff1a;赖嘉明 研发效能&#xff08;DevOps&#xff09;工程师认证学员 随着数字化转型的推进及市场竞争的加剧&#xff0c;越来越多的企业也意识到持续集成的重要性。 而持续集成作为一种先进的软件开发实践和工具链&#xff0c;可以帮助企业实现自动化构建、集成和…...

中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线,可以进入轻松学编程

中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线&#xff0c;可以进入轻松学编程 学习编程捷径&#xff1a;&#xff08;不论是正在学习编程的大学生&#xff0c;还是IT人士或者是编程爱好者&#xff0c;在学习编程的过程中用正确的学习方法 可以达到事半…...

2024年最新水果音乐制作软件FL Studio21需要多少钱呢?

水果&#xff0c;全称Fruity Loop Studio&#xff0c;简称FL Studio。是一款全能的音乐制作软件&#xff0c;经过二十多年的演化更迭&#xff0c;其各项功能非常的先进。其开创性的Pat\song模式&#xff0c;也为初学者的学习提供了便利。那么水果音乐制作软件FL Studio21需要多…...

当生成式AI遇到业务流程管理,大语言模型正在变革BPM

生成式AI对各领域有很大影响&#xff0c;一个方面在于它改变了很多固有业务的工作流。 工作流&#xff08;Workflow&#xff09;是业务流程的一种实现方式&#xff0c;一个业务流程往往包含多个工作流范式以及相关的数据、组织和系统。 因此&#xff0c;提及工作流必然离不开业…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...