# 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) — 摄像机 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 属性定制键位绑定。