3.6 KiB
3.6 KiB
BP_TestCtl
基本信息
- 类型: Blueprint (PlayerController)
- 父类: AMyPlayerController
- 源文件: /Game/Blueprints/BP_TestCtl.BP_TestCtl
- 模块: Content/Blueprints
功能概述
BP_TestCtl 是项目的玩家控制器蓝图实现,继承 C++ 的 AMyPlayerController。它实现了 OnClientPossessFinished 事件用于 Possess 完成后的初始化,并提供 SetupControllingPawn 自定义函数用于控制权切换后的 Pawn 设置。
设计用意
BP_TestCtl 利用 AMyPlayerController 的禁用摄像机计算特性(支持 ACameraPawn 分离式摄像机),在蓝图层面提供 Possess 完成后的客户端初始化和 Pawn 设置逻辑。作为一个薄蓝图层,它将 C++ 层的控制器能力暴露给蓝图系统进行配置和扩展。
职责范围
BP_TestCtl 负责 Possess 完成时的客户端初始化和控制权切换后的 Pawn 设置。摄像机计算由 C++ 层禁用(CalcCamera 空操作),角色移动由 AMyCharacter 负责,BP_TestCtl 不涉及这些底层逻辑。
项目内依赖
| 依赖项 | 关系 | 源文件 |
|---|---|---|
| AMyPlayerController | 父类 | C++ 源码 |
外部视角
BP_TestCtl 是 AMyPlayerController 的蓝图子类,从外部调用者视角:
继承自 AMyPlayerController 的公开接口
GetOwnedPawn()(BlueprintCallable)— 获取当前控制器拥有的 Pawn 实例,C++ 默认实现OnClientPossessFinished(APawn* P)(BlueprintImplementableEvent)— Possess 完成时的客户端初始化事件,蓝图可选择性实现
BP_TestCtl 新增
SetupControllingPawn(EventGraph 中定义的自定义函数)— 控制权切换后调用,用于初始化被控制 Pawn 的状态。无公开 BlueprintCallable 标注,在蓝图层内部调用
EventGraph 事件
| 事件 | 类型 | 触发时机 | 行为 |
|---|---|---|---|
事件开始运行 |
原生覆盖 (BeginPlay) | 控制器创建时由引擎自动触发 | 延迟 0.2 秒 → 显示鼠标光标 → 设置视图目标为自引用的 Possessed Pawn → 获取 HUD → Cast 到 BP_Hud → 获取 CommandRouter → 注册内部路由端点 |
事件OnClientPossessFinished |
原生覆盖 | 客户端 Possess 流程完成后 | 调用 SetupControllingPawn → 获取 BP_Controller 组件 → 调用 ResetControllerLocation |
UpdateInvComp_RPCReplicated |
自定义事件 (RPC) | 客户端库存变化时 | 接收 BP_InventoryComp 引用 → 调用服务器端 UpdateViewCache, 客户端 UpdateViewCacheRPC |
外部交互方式
- 引擎通过 GameMode 的 PlayerControllerClass 设置自动创建实例(BP_TestMode 中配置)
- C++ 层通过
Cast<AMyPlayerController>获取引用 - 蓝图层通过
GetPlayerController节点获取
使用方法
BP_TestCtl 在项目中的典型调用流程:
- 游戏初始化流程 — BP_TestMode 将 PlayerControllerClass 设为 BP_TestCtl → 引擎自动实例化 → 触发 BeginPlay → 延迟后显示鼠标光标、设置视图目标、从 HUD 获取 CommandRouter 并注册端点
- Possess 完成流程 — 引擎 Possess Pawn 完成后 → 触发 OnClientPossessFinished → SetupControllingPawn → 获取 BP_ControllerComp → 调用 ResetControllerLocation 重置摄像机
- 库存同步流程 — 客户端库存变化 → UpdateInvComp_RPCReplicated 触发 → 服务器端更新 ViewCache → 客户端同步刷新
用例
| 引用方 | 路径 | 用途 |
|---|---|---|
| BP_TestMode | /Game/Blueprints/BP_TestMode |
设为 PlayerControllerClass,游戏启动时自动实例化 |
| BP_Barrel | /Game/Blueprints/Playground/BP_Barrel |
引用 BP_TestCtl 用于木桶交互 |