虚幻引擎Gameplay框架
(参考官网文档)
虚幻引擎的Gameplay框架时一组类,基于其提供的模块化功能构建游戏。
概述
游戏实例(UGameInstance) 会在引擎启动时实例化,并保持活跃直至引擎关闭。这是一种管理器类,在游戏中不存在实体,但会追踪数据和运行代码。在联网多人游戏中,游戏实例不会被复制,而是独立存在于服务器以及所有互联的客户端上。所有你希望在关卡加载间保持的内容都应存于游戏实例中。例如,游戏实例是管理游戏保存系统的到地方。游戏实例还可以充当任意数量的 游戏实例子系统 的管理器,这些子系统由游戏实例创建和销毁,并且与游戏实例本身具有相同的生命周期。在线子系统就属于这类子系统。你可以用它管理游戏内的在线服务功能,如好友、游戏会话、游戏大厅、排行榜等等。
游戏实例子系统(UGameInstanceSystem)是一种生命周期受控的自动实例化类,它为开发着提供了在游戏实例生命周期内管理全局数据和功能的强大机制。在UGameInstance初始化时调用Initialize(),在UGameInstance关闭时调用Deinitialize(),随后将被垃圾回收(如果没有其他引用)。运行期,在整个游戏运行期间保持活动状态(从游戏开始到结束)。全局访问,可以通过UGameInstance的GetSubsystem()方法访问。优势,避免覆盖引擎类:不需要从UGameInstance派生自定义类;减少复杂类膨胀:避免在UGameInstance中添加过多API;蓝图友好:自动暴露到蓝图,提供类型化节点;Python支持:可以通过Python脚本访问;模块化和一致性:在代码库中提供更好的组织结构;生命周期自动管理:不需要手动处理初始化和销毁。典型应用场景,全局游戏统计系统:跟踪玩家在整个游戏过程中的统计数据;遥测系统:收集从主菜单到游戏内部的遥测信息;存档管理系统:处理游戏存档的加载和保存;全局游戏状态:管理游戏的整体状态(如暂停菜单状态);资源管理系统:跟踪游戏中的全局资源使用情况;
游戏模式(UGameMode) 会在引擎加载你的关卡并创建世界后立即实例化。游戏模式是一种基于服务器的管理器类,继承自Actor类。由于这种类会在关卡加载时创建,它不会持续运载于所有关卡中。游戏模式是在关卡加载时第一个被实例化的Actor,可以按地图一一设置。游戏模式在Gameplay框架中处于核心地位,管理着一个Gameplay会话的所有规则和结构,并在创建时实例化剩余的框架Actor。前两个将是游戏状态和玩家状态。
游戏状态(UGameState) 和 玩家状态(UPlayerState) 是非实体Actor,分别用于追踪游戏和游戏内玩家的状态。在联网多人游戏中,这些类会在权威服务器和所有互联的客户端间复制其状态信息。游戏状态包含与游戏内所有玩家相关的数据和逻辑,例如队伍得分、目标以及所有玩家及其相关玩家状态的列表。而玩家状态处理其关联玩家的相关数据和逻辑,例如生命值、子弹数量和物品栏。游戏状态由游戏模式创建。玩家状态会在每个玩家加入游戏或进入关卡时分别创建。
游戏模式会在玩家加入游戏时生成玩家。一个玩家主要由一个 控制器 和一个 Pawn 组成。控制器类处理玩家在游戏世界内的操作逻辑。UE中有两种用途广泛的控制器类:玩家控制器 和 AI控制器。玩家控制器类是一种管理器类,可以处理来自人类的输入,显示抬头信息并处理游戏内的物理表现。AI控制器类也是管理器类,主要处理游戏内的物理表现,并在UE的人工智能帮助下显示其操作,包括:行为树、状态树、寻路等等。
作为一种非实体Actor类,控制器类及其派生的类在游戏世界内没有实体。Pawn 类由玩家在游戏世界内的物理实体组成。Pawn类对玩家的重要性不亚于控制器类。控制器处理Pawn并指使其在游戏执行操作。Pawn作为一种派生自Actor的类,由数种Actor组件构成,包括碰撞组件、静态网格体组件和移动组件。角色类是派生自Pawn的子类,由默认Pawn类以及多种功能丰富的组件构成,包括:角色移动组件、骨架网格体组件和胶囊体组件。
Gameplay框架类
类 | 说明 | 派生类 |
---|---|---|
Actor | Actor是可以放置在关卡中的任意对象,如摄像机、静态网格体或玩家出生点。Actor支持变换,如平移、选择和缩放。你可以通过Gameplay代码生成和摧毁它们。 Actors还是一种容器,持有名为Actor组件的特定对象类型。不同类型的组件可控制Actor的移动方式、渲染方式,等等。Actor的其他主要功能还包括在游戏过程中,在网络中复制属性和函数。 | Pawn、控制器(Controller)、游戏模式(Game Mode)、游戏状态(Game State)、玩家状态(Player State)、HUD、摄像机(Camera),等等。 |
Actor Component | Actor组件是Actor的构成元素。不同的Actor组件控制者着Actor的不同方面,如Actor的移动方式、渲染方式、在世界中的位置及其呈现给玩家的样子等。 | 场景组件(Scene Component)、音频组件(Audio Component)、粒子系统组件(Particle System Component)、图元组件(Primitive Component)、摄像机㢟(Camera Component)、弹簧臂组件(Spring Arm Component)、骨架网格体组件(Skeletal Mesh Component)、静态网格体组件(Static Mesh Component),等等。 |
Pawn | Pawn是所有可以被玩家或AI控制的Actor的基类。 | 默认Pawn(Default Pawn)、旁观者Pawn(Spectator Pawn)、角色(Character) |
Character | 角色是一种特殊的Pawn,是可以在世界中直立行走、奔跑、跳跃、飞行和游泳的玩家表示。 | |
Controller | 控制器是一种非实体Actor,可以处理Pawn以控制其操作。人类玩家使用玩家控制器操控Pawn,而AI控制器依靠人工智能来实现Pawn的操作。 | 玩家控制器(Player Controller)、AI控制器(AI Controller) |
World | 世界是表示地图的最上层对象,Actor和组件都存在于世界中,并在其中渲染。它包含持久关卡以及许多其他对象,如游戏状态、游戏模式以及当前存在于地图中的Pawn和控制器列表。 | |
GameMode | 游戏模式是最主要的类,指定Gameplay框架中要使用的其他类,通常被用于指定模式的游戏规则,例如夺旗。 | |
Game Instance | 游戏实例类在游戏整个生命周期内始终存在。在地图和菜单间切换都将维护此类的同一个实例。此类被用于管理需要在游戏整个生命周期内始终存在,不受关卡和地图切换影响的信息和系统。你也可以用游戏实例类管理不同的游戏实例子系统。 | |
Game Instance System | 游戏实例子系统被用于管理需要在游戏整个生命周期内持续存在的系统和功能,例如为提供联网体验的游戏控制游戏内的在线服务功能。 | |
Game State | 游戏状态包含与游戏内所有玩家相关的数据和逻辑,例如队伍得分、目标以及所有玩家及其相关玩家状态的列表。 | |
Player State | 玩家状态处理其关联玩家的相关数据和逻辑,例如生命值、子弹数量和物品栏。 | |
Gameplay Statics | 静态类处理常见的游戏相关功能,如播放音效、生成粒子效果、生成Actor、对Actor施加伤害、获取玩家Pawn、玩家控制器等等。 | |
User Interface | 用户界面(UI)由游戏菜单、抬头显示(HUD)和绘制在游戏屏幕上的其他元素组成。它们为用户提供信息,帮助玩家与游戏交互。 | |
HUD | HUD是一种基础对象,用于显示覆盖在屏幕上的元素。 游戏中每个由人类控制的玩家都有各自的实例,以绘制其个人视口。 | |
Camera | 摄像机表示玩家的视角,或玩家观察世界的方式。因此,摄像机只与人类控制的玩家相关。 |
未完待续