apawn

APawn

🎮 Unreal Engine — APawn 与 ACharacter 比较


📌 核心概念

  • APawn:所有可控制游戏对象的基类,代表世界中一个可被“控制”或“占据”的通用实体。
  • ACharacter继承自 APawn,是专门为代表人形角色(Biped)而设计的高度特化类,提供了开箱即用的复杂移动功能。

🏗️ 类继承关系

UObject

└── AActor

  └── APawn

       └── ACharacter

  • APawn 继承自 AActor,增加了被控制器(Controller)占据(Possess)的能力。
  • ACharacter 继承自 APawn,增加了 SkeletalMeshCapsuleComponent 和强大的 CharacterMovementComponent

⚙️ 特性对比

特性维度🤖 APawn (通用基类)🧍 ACharacter (特化派生类)
移动组件默认无。需手动添加(如 UFloatingPawnMovement)或实现自定义移动逻辑。默认包含 UCharacterMovementComponent。提供复杂的人形移动(走、跑、跳、飞、泳、坠)。
碰撞体无默认形状。通常使用 UCapsuleComponentUBoxComponent 作为根组件。默认包含 UCapsuleComponent 并设为根组件,完美匹配人形碰撞。
网格体通常使用 UStaticMeshComponent默认使用 USkeletalMeshComponent(名为 Mesh),用于播放骨骼动画。
网络同步支持,但移动等核心功能的同步需开发者手动处理。对网络多人游戏有强大的内置支持。移动组件自动同步移动状态,保证一致性。
核心用途车辆、飞船、相机、简单物体、需要完全自定义移动逻辑的任何实体。玩家角色、人类或类人NPC、任何需要复杂地形交互和跳跃的角色。

🛠️ 如何选择?

你的需求推荐选择理由
制作玩家角色人形生物ACharacter提供所有必需组件,节省大量开发时间。
项目是多人游戏ACharacter内置强大且可靠的移动同步功能。
制作车辆、飞机、船APawn无需人形移动逻辑,可自由实现特定物理效果。
需要完全自定义移动规则APawn提供最大的灵活性,不受 CharacterMovementComponent 规则限制。
需要一个简单的可控制摄像机APawn结构更简单,资源开销更小。

📝 代码示例

APawn 示例 (C++ 构造函数)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 一个简单的飞行器 Pawn
AFlyingVehicle::AFlyingVehicle()
{
    PrimaryActorTick.bCanEverTick = true;

    // 1. 创建根组件(碰撞体)
    CollisionBox = CreateDefaultSubobject<UBoxComponent>(TEXT("CollisionBox"));
    SetRootComponent(CollisionBox);

    // 2. 创建视觉网格体并附加
    VehicleMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("VehicleMesh"));
    VehicleMesh->SetupAttachment(RootComponent);

    // 3. 添加一个简单的移动组件
    MovementComponent = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("MovementComponent"));
}

ACharacter 示例 (蓝图)

在蓝图中,ACharacter 已经内置了所有组件,你通常只需要: