UE AController
- 定义和功能
AController是一种特定于游戏的控制器,在UE框架中用于定义玩家和AI的控制逻辑。AController负责处理玩家输入,并根据这些输入驱动游戏中的角色或其他实体的行为。 - 设计理念
AController设计用于分离控制逻辑与游戏角色,增强游戏设计的灵活性。通过这种方式,可以灵活地为游戏对象添加或修改控制逻辑,而不影响游戏对象的基本设计。 - 相关类关系
AController是AActor的子类,允许它在游戏世界中作为一个实体存在。它可以控制APawn类的对象,后者是具体的游戏角色实现。 - 游戏场景例子
在一个FPS游戏中,APlayerController可以处理键盘和鼠标输入,控制一个APawn实例进行移动和射击。游戏中的AI敌人则可能由AIController控制,这些控制器使用复杂的逻辑来模拟战术行为。
(1)Controller和Pawn必须1:1吗?
- 在Unreal Engine中,默认情况下,每个Controller控制一个Pawn,形成1:1的关系。
- 开发者可以通过在Controller中实现额外的逻辑来管理多个Pawn,但这需要自定义扩展,因为引擎默认并不支持多对多关系。
(2)Controller可以显示吗?
- 从技术上讲,Controller是可以显示的。
- 虽然Controller通常被视为逻辑控制单位,不直接涉及游戏的图形表现,但由于Controller本质上是从AActor继承而来的,开发者可以为其添加Mesh组件或其他可视组件。
- 然而,在实践中,Controller通常被设计为隐藏状态(
bHidden = true
),因为它们主要用于处理游戏逻辑而不是视觉表现。
(3)Controller的位置有什么意义?
- Controller的位置对于控制Pawn的空间方位非常重要。虽然Controller主要是逻辑单位,但它拥有位置信息可以帮助更精确地控制Pawn,如同步位置和方向。
- 例如,PlayerController可能需要知道自己在游戏世界中的位置以控制摄像机视角。
- 此外,某些游戏设计可能需要Controller在特定位置生成Pawn或对环境进行查询,这些都依赖于Controller的空间位置信息。
(4)哪些逻辑应该写在Controller中?
- 应该在Controller中编写与游戏控制流程、决策逻辑、玩家输入响应等相关的逻辑。例如,如何响应用户的键盘或鼠标输入,控制角色移动和交互,以及如何执行战略决策等。
- 如果某些功能或行为跨多个Pawn或需要在Pawn之间共享和复用,将其放在Controller中可以增加代码的重用性和灵活性。
- 此外,任何需要在Pawn被销毁和重新生成时保留的状态也应该存放在Controller中,因为Controller的生命周期通常长于单个Pawn。
(5)哪些数据应该放在PlayerState中?
- PlayerState主要用于存储与玩家的持续状态有关的数据,如玩家得分、游戏统计信息和玩家在当前关卡或游戏会话中的进度。这些数据需要在玩家断开连接或游戏状态改变时持久化。
- 对于跨关卡或游戏会话持久的数据,比如玩家的整体游戏成就或设置,应当存储在GameInstance或使用SaveGame机制进行保存,因为PlayerState在玩家离开当前游戏关卡时可能会被重置或销毁。