Pawn 是虚幻引擎中所有可被“控制”的对象的基类。它是玩家或 AI 在游戏世界中的物理化身,处理着从位置、旋转到碰撞交互等一切事物。
🧬 在Gameplay框架中的位置与组件
在虚幻引擎的类继承体系中,Pawn 继承了 Actor,是构建可控角色的基础。它不能独立存在,必须由控制器(Controller) 来“占有”并下达指令。
-
AActor:游戏中所有可放置对象的基类,定义了位置、旋转、缩放、生命周期和组件系统等核心功能。 -
APawn:它是AActor的子类,代表了可以被控制的“化身”。 -
ACharacter:它是APawn的子类,专为人类形态角色设计,内置了移动和碰撞组件。 -
Controller:控制APawn的对象,分为APlayerController(处理真人玩家输入)和AAIController(负责AI逻辑)。
为了扩展功能,Pawn 也遵循组件化设计,可以自由组合各类组件:
-
UPrimitiveComponent:用于处理碰撞和物理交互。 -
UCameraComponent:为游戏提供摄像机视角。 -
UMovementComponent:控制 Pawn 的移动。移动组件主要有以下几种类型:-
UPawnMovementComponent:所有 Pawn 移动组件的基类。 -
UDefaultPawnMovementComponent:用于ADefaultPawn,提供无重力的飞行式移动。 -
UFloatingPawnMovementComponent:一个简单的移动组件,可为任何 Pawn 类提供基础的移动功能。 -
UCharacterMovementComponent:ACharacter专属,支持行走、跑动、跳跃、游泳和飞行等复杂运动模式。
-
🕹️ 核心概念与交互机制
1. 操控与解耦
“控制器-被控体”模型是 Pawn 的核心设计。它将“行为逻辑”(控制器)与“物理表现”(Pawn)分离,极大地提升了代码的复用性和灵活性。这使得控制逻辑可以在不同 Pawn 之间切换(如进入载具),网络同步更高效,AI逻辑也得以独立实现。
2. 移动:使Pawn具备活动能力
移动组件 (UMovementComponent) 是实现 Pawn 运动的关键。
-
ADefaultPawn:自带UDefaultPawnMovementComponent,提供无重力的飞行式移动,可通过MaxSpeed、Acceleration等参数控制。 -
ACharacter:使用UCharacterMovementComponent,支持行走、跑动、跳跃、游泳、飞行等更复杂的模式。
3. 输入处理:让玩家控制Pawn
Pawn 通过其内部的 InputComponent 组件来处理来自 PlayerController 的输入。典型的处理流程如下:
-
配置输入:在“项目设置 -> 输入”中,将键盘、鼠标等硬件按键映射为抽象的“动作”(如“Jump”)和“轴”(如“MoveForward”)。
-
绑定事件:在 Pawn 的
SetupPlayerInputComponent函数中,将这些映射好的“动作”和“轴”连接到具体的 C++ 函数或蓝图自定义事件上。 -
执行逻辑:当玩家按下按键时,
PlayerController捕获输入并分发给当前控制的 Pawn,由其绑定的函数执行移动、攻击等逻辑。
4. AI控制:使Pawn具备自主行为
与玩家控制类似,AI 控制 Pawn 也依赖 AAIController。
-
行为树与黑板:
AAIController运行 行为树(Behavior Tree),通过读取共享的 黑板(Blackboard) 数据来决策。行为树节点可以调用AAIController上的任务(Tasks)来间接控制 Pawn 移动。 -
AI感知系统:AI 控制器可通过
AIPerceptionComponent组件为 Pawn 赋予听觉、视觉等“感官”,使其能感知周围环境变化并做出反应。
⚔️ Pawn vs. Character:你应该选择哪一个?
ACharacter 是 APawn 的一个特化子类,封装了角色类游戏所需的大量功能。你可以根据下表进行选型:
| 特性 | APawn | ACharacter |
|---|---|---|
| 定位 | 通用“外壳”,轻量可控 | 专门化的人形或类人形角色 |
| 默认碰撞 | 需手动添加 | 自带胶囊体组件 (CapsuleComponent) |
| 默认视觉 | 需手动添加 | 自带骨架网格体组件 (SkeletalMeshComponent) |
| 移动能力 | 无内置移动,需添加组件或手动编写 | 自带复杂的角色移动组件 (CharacterMovementComponent) |
| 网络与动画 | 需手动处理 | 内置动画蓝图集成和网络移动优化 |
| 应用场景 | 载具、子弹、漂浮的鬼魂等特殊对象 | 玩家控制的主角、NPC(非玩家角色)等标准人形或类人形角色 |
🧩 几个开箱即用的派生Pawn
-
ADefaultPawn:提供了基础移动组件、球形碰撞体和一个静态网格体组件(
StaticMeshComponent),便于快速原型开发。 -
ASpectatorPawn:
ADefaultPawn的子类,通常用作“观战”模式的载体,本身没有视觉表现,用于自由浮动观察。
🔧 创建你的第一个可控 Pawn
-
新建Pawn类:在编辑器中通过C++或蓝图创建一个继承自
APawn的新类。 -
添加组件:在构造函数中添加必要的组件,如
USceneComponent(根)、UCameraComponent(摄像机)和UStaticMeshComponent(视觉表现)等。 -
配置自动控制:设置其
AutoPossessPlayer属性,使其在游戏开始时自动被Player 0(即第一位本地玩家)控制。 -
配置输入:在项目设置的输入(Input)部分,为你的动作(如“MoveX”)和操作(如“Jump”)设置按键映射。
-
绑定输入:重写
SetupPlayerInputComponent函数,将输入映射绑定到你的 Pawn 函数上。 -
实现逻辑:在
Tick函数中根据累积的输入移动 Pawn,或通过CharacterMovementComponent等专业组件处理移动。 -
设置默认Pawn:在
GameMode中,将你创建的 Pawn 类设置为默认 Pawn 类。
📚 进阶探索
-
多人联网同步:深入理解
Controller和Pawn在网络架构中的角色,学习如何高效地同步状态。 -
复杂运动模型:自定义
UMovementComponent,创造独特的移动机制,如物理驱动、滑翔等。 -
高级AI:结合行为树、环境查询系统(EQS)和感知系统,打造更智能、更真实的NPC。
对于刚接触虚幻引擎的开发者来说,Pawn 是你进入UE5世界的第一步,掌握它,你就能亲手创造和控制世界中的每一个角色。
感谢您的来访,获取更多精彩文章请收藏本站。









暂无评论内容