# 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 资源