Files
loneseDocument/Source/lonese/AMyCharacter.md
meishibiezb 29a3f77908 init
2026-06-04 21:44:13 +08:00

4.0 KiB
Raw Permalink Blame History

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) — 摄像机 Pawn 类BeginPlay 中以此类生成 CameraActor。

C++private供内部输入绑定使用

  • CameraZoom / CameraRotate / CameraMove / CameraReset — 将输入值转发给当前 CameraActor 的对应方法。

使用方法

  • 类声明:Source/lonese/MyCharacter.h:10-74
  • 构造函数:Source/lonese/MyCharacter.cpp:92-103 — 设置初始移动速度等默认属性。
  • BeginPlaySource/lonese/MyCharacter.cpp:106-133 — 生成 CameraActor通过 CameraActorClass 或默认 ACameraPawn 类),挂接到自身。
  • SetupPlayerInputComponentSource/lonese/MyCharacter.cpp:143-196 — 添加 DefaultMapping 到 Enhanced Input 子系统,绑定全部 8 个输入动作到对应方法。
  • TickSource/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 属性定制键位绑定。