Files
loneseDocument/Content/Blueprints/BP_TestCtl.md
meishibiezb 29a3f77908 init
2026-06-04 21:44:13 +08:00

44 lines
2.9 KiB
Markdown
Raw 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
## 功能概述
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 资源