3.1 KiB
3.1 KiB
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(输入管线中的角色)