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