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

2.9 KiB
Raw Blame History

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