This commit is contained in:
meishibiezb
2026-06-04 21:37:53 +08:00
parent b0d2a0e2e7
commit 29a3f77908
63 changed files with 4068 additions and 1 deletions

View File

@@ -0,0 +1,57 @@
# 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++ / BlueprintUFUNCTION全部 BlueprintCallable**
- `Move(FInputActionValue)` — 接收移动输入(世界空间坐标),根据走/跑状态设置速度为 600 或 1200。
- `BeginRun(FInputActionValue)` / `StopRun(FInputActionValue)` — 开始/停止跑步状态。跑步时 MaxWalkSpeed 设为 1200走路为 600。
- `BeginCrouch(FInputActionValue)` / `StopCrouch(FInputActionValue)` — 开始/停止蹲下,调用 ACharacter 的 Crouch/UnCrouch。
- `IsRunning() -> bool` — 查询当前是否处于跑步状态。
- `IsCrouching() -> bool` — 查询当前是否处于蹲下状态。
**C++ / BlueprintUPROPERTYEditAnywhere/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 属性定制键位绑定。