# AMyPlayerController ## 基本信息 - **类型**: UCLASS - **父类**: APlayerController - **源文件**: Source/lonese/MyPlayerController.h - **模块**: lonese ## 功能概述 AMyPlayerController 是自定义 PlayerController,提供三种行为:GetOwnedPawn(GetPawn 的蓝图包装)、CalcCamera 覆写(调用 AActor::CalcCamera 以禁用内置视口目标混合)、AcknowledgePossession 覆写(触发 OnClientPossessFinished BlueprintImplementableEvent,供蓝图实现 Possess 后逻辑)。 ## 设计用意 作为 C++ 与蓝图之间的桥梁。CalcCamera 覆写阻止默认摄像机系统干扰 ACameraPawn 的工作。OnClientPossessFinished 提供蓝图钩子,满足 Possess 后初始化(如 UI 设置、游戏性逻辑)的常见需求。 ## 职责范围 PlayerController 的自定义层:禁用默认摄像机混合计算、提供蓝图 Possess 事件通知。不实现摄像机逻辑(委托给 ACameraPawn 通过视口目标机制处理)。 ## 项目内依赖 | 依赖项 | 关系 | 源文件 | |--------|------|--------| |(无)| — | 不依赖任何项目内类,仅引用引擎头文件 | ## 对外接口 **C++ / Blueprint(UFUNCTION)** - `GetOwnedPawn() -> APawn*` (BlueprintCallable) — 返回当前控制的 Pawn。对 APlayerController::GetPawn() 的蓝图友好包装。 **Blueprint(UFUNCTION,BlueprintImplementableEvent)** - `OnClientPossessFinished(APawn* P)` — 当 Possess 完成时由 C++ 层触发的蓝图事件。在 AcknowledgePossession 中调用,参数为被 Possess 的 Pawn。蓝图可覆写此事件实现 Possess 后初始化逻辑(如 UI 设置、状态重置)。 **C++(覆写基类)** - `CalcCamera(float DeltaTime, FMinimalViewInfo& OutResult)` — 覆写 APlayerController::CalcCamera,调用 `AActor::CalcCamera` 以禁用内置视口目标混合(viewport blending),确保 ACameraPawn 的视口目标设置不被干扰。 - `AcknowledgePossession(APawn* P)` — 覆写 APlayerController::AcknowledgePossession,在调用 Super 后触发 OnClientPossessFinished 蓝图事件。 ## 使用方法 - 类声明:`Source/lonese/MyPlayerController.h:13-29` - GetOwnedPawn 实现:`Source/lonese/MyPlayerController.cpp:6-8` — 调用并返回 `GetPawn()`。 - BeginPlay 实现:`Source/lonese/MyPlayerController.cpp:11-13` — 仅调用 Super。 - CalcCamera 覆写:`Source/lonese/MyPlayerController.cpp:16-18` — 调用 `AActor::CalcCamera` 禁用摄像机混合。 - AcknowledgePossession 覆写:`Source/lonese/MyPlayerController.cpp:21-24` — Super 后触发 OnClientPossessFinished。 ## 用例 - **BP_TestCtl** — 项目玩家控制器蓝图,继承自 AMyPlayerController,在蓝图中实现 OnClientPossessFinished 事件处理 Possess 完成后逻辑,并定义 SetupControllingPawn 自定义函数处理控制权切换。 - `Document/Content/Blueprints/BP_TestCtl.md:5`(父类为 AMyPlayerController) - `Document/Content/Blueprints/BP_TestCtl.md:10,13`(实现 OnClientPossessFinished,利用禁用摄像机计算特性) - `Document/Content/Blueprints/_relationships.md:8,38`(输入管线中的角色)