This commit is contained in:
meishibiezb
2026-06-04 21:37:53 +08:00
parent b0d2a0e2e7
commit 29a3f77908
63 changed files with 4068 additions and 1 deletions

View File

@@ -0,0 +1,43 @@
# BP_TestCtl
## 基本信息
- **类型**: Blueprint (PlayerController)
- **父类**: AMyPlayerController
- **源文件**: /Game/Blueprints/BP_TestCtl.BP_TestCtl
- **模块**: Content
## 功能概述
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++ 源码 |
## 对外接口
- **继承自 AMyPlayerController 的 BlueprintCallable 函数**
- `GetOwnedPawn()` -- 获取当前控制的 Pawn返回 APawn*,供蓝图查询当前 Possess 目标
- **继承自 AMyPlayerController 的 BlueprintImplementableEvent 事件**
- `OnClientPossessFinished(APawn* P)` -- 客户端 Possess 完成时调用,在 BP_TestCtl 的 EventGraph 中实现,客户端收到 Possess 确认后的初始化入口EventGraph 中 event_count=3
- **蓝图自定义函数**
- `SetupControllingPawn()` -- 控制权切换后的 Pawn 设置函数,无参数,在 EventGraph 的 18 个节点中被调用
- **继承自 APlayerController 的标准接口**:所有 APlayerController 的标准事件和函数均可用(如 OnPossess、OnUnPossess、GetPlayerViewPoint 等)
## 使用方法
- 在 BP_TestMode 中设置为 `PlayerControllerClass`,作为项目的默认玩家控制器
- 父类 AMyPlayerController 重写了 `CalcCamera`(空操作),禁用默认摄像机计算,配合 ACameraPawn 的分离式摄像机设计
- 父类 AMyPlayerController 重写了 `AcknowledgePossession`,在 Possess 确认后触发 `OnClientPossessFinished` 事件
- `OnClientPossessFinished` 在蓝图 EventGraph 中实现,用于客户端在 Possess 完成后的初始化逻辑
- `SetupControllingPawn` 在控制权切换时调用,设置新的受控 Pawn 所需的配置(如 UI 绑定、输入上下文切换等)
- 作为薄蓝图层,主要职责是将 C++ 层的控制器能力暴露给蓝图系统
## 用例
- BP_TestMode 的 `PlayerControllerClass`,每次玩家加入时实例化
- `OnClientPossessFinished` 事件连接客户端 Possess 完成的初始化流程
- `SetupControllingPawn` 在角色切换时重新配置 Pawn 资源