61 lines
3.6 KiB
Markdown
61 lines
3.6 KiB
Markdown
# 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 用于木桶交互 |
|