Files
loneseDocument/Content/Blueprints/BP_TestCtl.md
meishibiezb a8bdf281ff update
2026-06-05 03:01:15 +08:00

61 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 用于木桶交互 |