58 lines
4.0 KiB
Markdown
58 lines
4.0 KiB
Markdown
# AMyCharacter
|
||
|
||
## 基本信息
|
||
- **类型**: UCLASS
|
||
- **父类**: ACharacter
|
||
- **源文件**: Source/lonese/MyCharacter.h
|
||
- **模块**: lonese
|
||
|
||
## 功能概述
|
||
AMyCharacter 是玩家可控的主角类,通过 Enhanced Input 支持 WASD 移动(世界空间坐标)、走/跑切换(600/1200 速度)、蹲下切换,并将摄像机控制委托给 ACameraPawn。SetupPlayerInputComponent 添加输入映射上下文并绑定 8 个输入动作。摄像机输入转发至 BeginPlay 中生成的 CameraActor 子对象。
|
||
|
||
## 设计用意
|
||
作为项目主玩家角色,采用关注点分离策略:将摄像机逻辑委托给独立的 ACameraPawn,自身专注于角色移动和输入绑定。使用 Enhanced Input 实现现代化的输入处理。通过状态查询方法将角色状态暴露给蓝图。
|
||
|
||
## 职责范围
|
||
角色移动控制(走、跑、蹲)、输入动作绑定、摄像机 Pawn 的生成与所有权管理。在 BeginPlay 中生成并持有 CameraActor,将摄像机相关输入转发给该 Actor。不处理摄像机变换逻辑(委托给 ACameraPawn)。
|
||
|
||
## 项目内依赖
|
||
| 依赖项 | 关系 | 源文件 |
|
||
|--------|------|--------|
|
||
| ACameraPawn | 创建/引用(UPROPERTY 成员,BeginPlay 中 Spawn) | Source/lonese/CameraPawn.h |
|
||
| EnhancedInputSubsystems.h | #include(在 .cpp 中) | Engine |
|
||
| EnhancedInputComponent.h | #include(在 .cpp 中) | Engine |
|
||
|
||
## 对外接口
|
||
**C++ / Blueprint(UFUNCTION,全部 BlueprintCallable)**
|
||
- `Move(FInputActionValue)` — 接收移动输入(世界空间坐标),根据走/跑状态设置速度为 600 或 1200。
|
||
- `BeginRun(FInputActionValue)` / `StopRun(FInputActionValue)` — 开始/停止跑步状态。跑步时 MaxWalkSpeed 设为 1200,走路为 600。
|
||
- `BeginCrouch(FInputActionValue)` / `StopCrouch(FInputActionValue)` — 开始/停止蹲下,调用 ACharacter 的 Crouch/UnCrouch。
|
||
- `IsRunning() -> bool` — 查询当前是否处于跑步状态。
|
||
- `IsCrouching() -> bool` — 查询当前是否处于蹲下状态。
|
||
|
||
**C++ / Blueprint(UPROPERTY,EditAnywhere/BlueprintReadOnly)**
|
||
- `DefaultMapping` (UInputMappingContext*) — 默认输入映射上下文。
|
||
- `MoveAction` / `RunAction` / `CrouchAction` (UInputAction*) — 角色移动相关输入动作。
|
||
- `CameraMoveAction` / `CameraZoomAction` / `CameraResetAction` / `CameraRotateAction` (UInputAction*) — 摄像机相关输入动作(转发至 CameraActor)。
|
||
- `CameraActorClass` (TSubclassOf<ACameraPawn>) — 摄像机 Pawn 类,BeginPlay 中以此类生成 CameraActor。
|
||
|
||
**C++(private,供内部输入绑定使用)**
|
||
- `CameraZoom` / `CameraRotate` / `CameraMove` / `CameraReset` — 将输入值转发给当前 CameraActor 的对应方法。
|
||
|
||
## 使用方法
|
||
- 类声明:`Source/lonese/MyCharacter.h:10-74`
|
||
- 构造函数:`Source/lonese/MyCharacter.cpp:92-103` — 设置初始移动速度等默认属性。
|
||
- BeginPlay:`Source/lonese/MyCharacter.cpp:106-133` — 生成 CameraActor(通过 CameraActorClass 或默认 ACameraPawn 类),挂接到自身。
|
||
- SetupPlayerInputComponent:`Source/lonese/MyCharacter.cpp:143-196` — 添加 DefaultMapping 到 Enhanced Input 子系统,绑定全部 8 个输入动作到对应方法。
|
||
- Tick:`Source/lonese/MyCharacter.cpp:136-140` — 仅调用 Super。
|
||
- Move 实现:`Source/lonese/MyCharacter.cpp:12-29`
|
||
- BeginRun/StopRun 实现:`Source/lonese/MyCharacter.cpp:32-41`
|
||
- BeginCrouch/StopCrouch 实现:`Source/lonese/MyCharacter.cpp:43-56`
|
||
- 摄像机输入转发:`Source/lonese/MyCharacter.cpp:59-89`
|
||
|
||
## 用例
|
||
- **BP_TestChar** — 项目主角色蓝图,继承自 AMyCharacter。在 BeginPlay 中添加 CharacterControl 插件组件(UCommandRouterComponent 及各端点组件)。配置 CameraActorClass 指向 BP_CameraPawn。
|
||
- 声明:`Document/Content/Blueprints/BP_TestChar.md:5`(父类为 AMyCharacter)
|
||
- 关系:`Document/Content/Blueprints/_relationships.md:7`
|
||
- 蓝图继承类通过编辑 CameraActorClass 属性替换摄像机实现,通过配置 Input 类别下的 8 个 UInputAction 属性定制键位绑定。
|