Unreal
- 🎮 Unreal Engine — APawn 与 ACharacter 比较
- 📌 核心概念
- 🏗️ 类继承关系
- ⚙️ 特性对比
- 🛠️ 如何选择?
- 📝 代码示例
- **APawn 示例 (C++ 构造函数)**
- **ACharacter 示例 (蓝图)**
- ✅ 总结
🎮 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++ 构造函数)
AFlyingVehicle::AFlyingVehicle()
{PrimaryActorTick.bCanEverTick = true;CollisionBox = CreateDefaultSubobject<UBoxComponent>(TEXT("CollisionBox"));SetRootComponent(CollisionBox);VehicleMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("VehicleMesh"));VehicleMesh->SetupAttachment(RootComponent);MovementComponent = CreateDefaultSubobject<UFloatingPawnMovement>(TEXT("MovementComponent"));
}
ACharacter 示例 (蓝图)
在蓝图中,ACharacter
已经内置了所有组件,你通常只需要:
- 在
Mesh
组件上指定你的骨骼网格体(Skeletal Mesh)。 - 在动画蓝图中处理动画逻辑。
- 在事件图表中编写输入和控制逻辑,移动将由自带的
CharacterMovement
组件自动处理。
✅ 总结
- APawn 是 通用 的可控制对象基类,提供灵活性。
- ACharacter 是 特化 的人形角色类,提供完整的功能与便捷性。
- 选择依据:如果你的对象需要像“人”一样移动,用
ACharacter
;否则,用 APawn
来自定义一切。