- ♂️ 作者:海码007
- 专栏:UE虚幻引擎专栏
- 标题:UE4 中可全局获取的变量(例如游戏实例、玩家控制器、游戏模式等) 详解
- ❣️ 寄语:加油,一次专注一件事!
- 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。
在游戏开发过程中,有一些变量经常需要被别的蓝图调用,但是这个变量又不是全局变量。所以使用前需要通过Get Actor Of Class(获取类的actor)的方式获取对象的引用。但是假如我们将经常需要用到的变量存储在全局对象当中,下次别人要调用就直接通过这个全局对象来访问这个变量。
对象其实也是一种变量,所以全局对象也可以叫做全局变量
在UE4中,有一些全局可获取的变量,可以方便地访问和管理游戏的各个方面。
- GameInstance 游戏实例
- GameViewportClient 游戏视口客户端
- UWorld 游戏世界
- GameModeBase 游戏模式
- PlayerController 玩家控制器
- Actor 演员
通过这些全局变量,开发者可以方便地访问和管理游戏的不同方面,从而实现更灵活和高效的游戏逻辑和交互操作。
拓展:在UE4切换关卡时,下面这些全局变量不会被释放:
需要注意的是,不会被释放的变量只是在切换关卡时会保持不变,但在游戏结束或重新加载游戏时可能会被重置或释放。此外,其他不直接与特定关卡和角色关联的全局变量也可以在切换关卡时保持不变,如全局的游戏配置、游戏状态等。
UGameInstance:游戏实例,它负责保存和共享游戏的全局数据和状态。可以在项目中创建自定义的UGameInstance子类,通过GetGameInstance函数获取当前的游戏实例,并使用其中的变量来存储和访问全局数据。
GameInstance是UE4中的全局类,只有一个实例(就像是单例设计模式,只有一个对象)
GameInstance常用的函数与用法
深入思考:通过获取游戏实例得到的其实是父类的指针(应该是父类指针指向子类对象),但是使用父类指针是访问不了子类中特有的函数的,所以就需要进行类型转换(UE的类型转换在C++中对应的就是static_cast、dynamic_cast等类型转换函数)。
这是一种抽象编程的思想,假如【获取游戏实例】函数获取的不是父类指针,而是直接获取对应的子类指针,而且我们也不知道未来会有多少子类被定义。不能新定义一个子类,我们就去修改【获取游戏实例】函数的源码,很显然这种程序设计思想太垃圾了。
玩家控制器 和 GameInstance 使用方法很类似
它也可以通过【获取玩家控制器】函数获取父类指针,然后类型转换为子类类型之后就可以使用功能。
使用步骤:
在UE4中,UWorld是一个重要的类,代表了游戏世界的实例。它是一个容器,用于存储和管理游戏中所有的Actors(角色)和Objects(对象),并负责协调它们之间的交互和逻辑。
这部分内容了解的还不多,挖个坑,等学习熟练之后再将这部分内容补全。