一、节点概述
Get Player Character 是虚幻引擎5蓝图中的一个常用节点,用于获取当前游戏世界中玩家控制的角色(Character)对象。它属于 Gameplay Statics 类,本质上是调用 UGameplayStatics::GetPlayerCharacter 函数。
节点参数
| 参数 | 类型 | 说明 |
|---|---|---|
| Player Index | Integer | 玩家在控制器列表中的索引,从0开始。0通常代表本地玩家 |
节点返回值
-
Return Value:返回玩家控制器对应的Pawn,如果该Pawn不是Character类型则返回空(null)。
-
注意:此节点不会返回没有可用玩家控制器的远程客户端角色。
二、完整操作案例
案例一:在关卡蓝图中获取玩家角色并修改其属性
这是最基础、最常用的场景——在关卡蓝图中获取玩家角色,然后修改其变量或调用其函数。
具体操作步骤:
-
打开关卡蓝图
-
在主工具栏中点击 Blueprints 按钮 → 选择 Open Level Blueprint。
-
-
添加 Get Player Character 节点
-
在蓝图图表中 右键 → 搜索框输入
Get Player Character→ 点击添加该节点。
-
-
(可选)设置 Player Index
-
默认 Player Index 为 0,代表第一个本地玩家。单机游戏保持默认即可。
-
-
添加 Cast To 节点(类型转换)
-
从
Get Player Character的 Return Value 拖出连线 → 搜索并添加Cast To [你的角色蓝图类]节点。 -
例如,如果你的角色蓝图叫
BP_MyCharacter,就添加Cast To BP_MyCharacter。
-
-
执行目标操作
-
从 Cast 节点的 As BP_MyCharacter 输出拖出连线 → 调用你想执行的函数或设置变量。
-
例如:设置角色的生命值、改变角色速度、播放动画等。
-
-
编译并运行
-
点击工具栏 Compile 编译蓝图 → 点击 Play 运行测试。
-
案例二:在控件蓝图(Widget)中获取玩家角色
在UI控件蓝图中经常需要获取玩家角色来显示血量、分数等信息。
具体操作步骤:
-
创建或打开控件蓝图
-
在 Content Browser 中右键 → User Interface → Widget Blueprint。
-
-
在事件图表中添加逻辑
-
打开控件蓝图的事件图表(Event Graph)。
-
-
添加 Get Player Character 节点
-
在图表中 右键 → 搜索
Get Player Character→ 添加节点。
-
-
类型转换并获取数据
-
从 Return Value 拖出 → 添加
Cast To [你的角色蓝图]。 -
从 Cast 节点的输出获取角色上的变量(如
Health、Score等)。
-
-
更新UI显示
-
将获取到的数据连接到对应的 UI 控件(如 Text Block)的
Set Text节点。
-
-
常见错误提醒:在控件蓝图中,如果直接 Cast 失败,请确保:
-
使用
Get Player Character作为 Cast 的 Object 输入。 -
或者使用
Get Owning Player→Get Controlled Pawn来获取角色。
-
案例三:在角色蓝图中获取其他玩家角色
在多人游戏或需要获取其他玩家信息的场景中,可以通过 Player Index 参数来指定获取哪个玩家。
具体操作步骤:
-
打开角色蓝图的事件图表。
-
添加 Get Player Character 节点
-
右键添加节点,Player Index 参数设置为你想要获取的玩家索引。
-
0= 第一个玩家(通常是本地玩家)。 -
1= 第二个玩家,依此类推。
-
-
类型转换并获取信息
-
添加 Cast 节点进行类型转换。
-
获取该角色的位置、血量等信息。
-
-
⚠️ 多人游戏注意事项:
-
在多人游戏中,避免在动画蓝图等共享资源中直接使用
Get Player Character加固定索引,因为这会让所有玩家的动画都去获取同一个玩家的角色。 -
对于远程客户端角色,推荐遍历 PlayerStates 列表来获取。
-
案例四:在关卡蓝图中实现按按键切换控制角色
这是一个经典的使用案例——通过按下不同按键在多个角色之间切换控制。
具体操作步骤:
-
在关卡中放置多个角色
-
从 Content Browser 将角色蓝图拖入关卡中放置多个实例。
-
-
在关卡蓝图中创建角色引用
-
在 World Outliner 中选中所有角色。
-
打开关卡蓝图,在图表中 右键 → 选择 Create References to selected Actors。
-
这将为每个选中的角色创建一个引用节点。
-
-
添加按键事件
-
在图表中右键 → 搜索并添加键盘事件(如
1、2、3按键事件)。
-
-
添加 Get Player Controller 节点
-
在图表中右键 → 搜索并添加
Get Player Controller节点。 -
玩家控制器负责将玩家输入传递给被控制的 Pawn。
-
-
添加 Possess 节点
-
从
Get Player Controller的 Return Value 拖出连线 → 搜索并添加Possess节点。
-
-
连接逻辑
-
将每个按键事件连接到对应的
Possess节点。 -
将每个角色引用节点的输出连接到对应
Possess节点的 In Pawn 输入。
-
-
编译并测试
-
点击 Compile → 点击 Play。
-
按下键盘的 1、2、3 键,即可在多个角色之间切换控制。
-
三、常见问题与注意事项
1. Cast 失败(Accessed None)
-
原因:Get Player Character 返回的对象不是你期望的角色类型。
-
解决:确保 Cast 的目标类型与项目中实际使用的角色蓝图类匹配。
2. 在控件蓝图中 Cast 失败
-
原因:Target 对象设置不正确。
-
解决:使用
Get Player Character→Cast To [你的角色蓝图]的标准流程。
3. 多人游戏中获取到错误的角色
-
原因:使用了固定的 Player Index。
-
解决:根据具体需求动态获取玩家索引,或遍历 PlayerStates。
4. Get Player Character vs Get Player Pawn
-
Get Player Character:专门获取 Character 类型的 Pawn,如果不是 Character 则返回空。
-
Get Player Pawn:获取任何类型的 Pawn,不限制类型。
-
如果你的玩家是载具(Vehicle)而非 Character,应使用 Get Player Pawn。
四、C++ 中的等效用法
如果你在 C++ 中使用,等效代码为:
#include "Kismet/GameplayStatics.h" ACharacter* MyCharacter = UGameplayStatics::GetPlayerCharacter(this, 0);
-
this是 WorldContextObject。 -
0是 Player Index。 -
返回类型是
ACharacter*,如果不是 Character 则返回nullptr。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容