APawn
🎮 Unreal Engine — APawn 与 ACharacter 比较
📌 核心概念
- APawn:所有可控制游戏对象的基类,代表世界中一个可被“控制”或“占据”的通用实体。
- ACharacter:继承自 APawn,是专门为代表人形角色(Biped)而设计的高度特化类,提供了开箱即用的复杂移动功能。
🏗️ 类继承关系
UObject
└── AActor
└── APawn
└── ACharacter
- APawn 继承自
AActor,增加了被控制器(Controller)占据(Possess)的能力。 - ACharacter 继承自
APawn,增加了 SkeletalMesh、CapsuleComponent 和强大的 CharacterMovementComponent。
⚙️ 特性对比
| 特性维度 | 🤖 APawn (通用基类) | 🧍 ACharacter (特化派生类) |
|---|
| 移动组件 | 默认无。需手动添加(如 UFloatingPawnMovement)或实现自定义移动逻辑。 | 默认包含 UCharacterMovementComponent。提供复杂的人形移动(走、跑、跳、飞、泳、坠)。 |
| 碰撞体 | 无默认形状。通常使用 UCapsuleComponent 或 UBoxComponent 作为根组件。 | 默认包含 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 已经内置了所有组件,你通常只需要: