虚幻引擎 Get Player Character 节点

一、节点概述

Get Player Character 是虚幻引擎5蓝图中的一个常用节点,用于获取当前游戏世界中玩家控制的角色(Character)对象。它属于 Gameplay Statics 类,本质上是调用 UGameplayStatics::GetPlayerCharacter 函数

节点参数

参数 类型 说明
Player Index Integer 玩家在控制器列表中的索引,从0开始。0通常代表本地玩家

节点返回值

  • Return Value:返回玩家控制器对应的Pawn,如果该Pawn不是Character类型则返回空(null)

  • 注意:此节点不会返回没有可用玩家控制器的远程客户端角色


二、完整操作案例

案例一:在关卡蓝图中获取玩家角色并修改其属性

这是最基础、最常用的场景——在关卡蓝图中获取玩家角色,然后修改其变量或调用其函数。

具体操作步骤:

  1. 打开关卡蓝图

    • 在主工具栏中点击 Blueprints 按钮 → 选择 Open Level Blueprint

  2. 添加 Get Player Character 节点

    • 在蓝图图表中 右键 → 搜索框输入 Get Player Character → 点击添加该节点

  3. (可选)设置 Player Index

    • 默认 Player Index 为 0,代表第一个本地玩家。单机游戏保持默认即可

  4. 添加 Cast To 节点(类型转换)

    • 从 Get Player Character 的 Return Value 拖出连线 → 搜索并添加 Cast To [你的角色蓝图类] 节点

    • 例如,如果你的角色蓝图叫 BP_MyCharacter,就添加 Cast To BP_MyCharacter

  5. 执行目标操作

    • 从 Cast 节点的 As BP_MyCharacter 输出拖出连线 → 调用你想执行的函数或设置变量

    • 例如:设置角色的生命值、改变角色速度、播放动画等。

  6. 编译并运行

    • 点击工具栏 Compile 编译蓝图 → 点击 Play 运行测试。


案例二:在控件蓝图(Widget)中获取玩家角色

在UI控件蓝图中经常需要获取玩家角色来显示血量、分数等信息。

具体操作步骤:

  1. 创建或打开控件蓝图

    • 在 Content Browser 中右键 → User Interface → Widget Blueprint

  2. 在事件图表中添加逻辑

    • 打开控件蓝图的事件图表(Event Graph)

  3. 添加 Get Player Character 节点

    • 在图表中 右键 → 搜索 Get Player Character → 添加节点

  4. 类型转换并获取数据

    • 从 Return Value 拖出 → 添加 Cast To [你的角色蓝图]

    • 从 Cast 节点的输出获取角色上的变量(如 HealthScore 等)。

  5. 更新UI显示

    • 将获取到的数据连接到对应的 UI 控件(如 Text Block)的 Set Text 节点。

  6. 常见错误提醒:在控件蓝图中,如果直接 Cast 失败,请确保:

    • 使用 Get Player Character 作为 Cast 的 Object 输入

    • 或者使用 Get Owning Player → Get Controlled Pawn 来获取角色


案例三:在角色蓝图中获取其他玩家角色

在多人游戏或需要获取其他玩家信息的场景中,可以通过 Player Index 参数来指定获取哪个玩家。

具体操作步骤:

  1. 打开角色蓝图的事件图表。

  2. 添加 Get Player Character 节点

    • 右键添加节点,Player Index 参数设置为你想要获取的玩家索引。

    • 0 = 第一个玩家(通常是本地玩家)

    • 1 = 第二个玩家,依此类推

  3. 类型转换并获取信息

    • 添加 Cast 节点进行类型转换。

    • 获取该角色的位置、血量等信息。

  4. ⚠️ 多人游戏注意事项

    • 在多人游戏中,避免在动画蓝图等共享资源中直接使用 Get Player Character 加固定索引,因为这会让所有玩家的动画都去获取同一个玩家的角色

    • 对于远程客户端角色,推荐遍历 PlayerStates 列表来获取


案例四:在关卡蓝图中实现按按键切换控制角色

这是一个经典的使用案例——通过按下不同按键在多个角色之间切换控制

具体操作步骤:

  1. 在关卡中放置多个角色

    • 从 Content Browser 将角色蓝图拖入关卡中放置多个实例

  2. 在关卡蓝图中创建角色引用

    • 在 World Outliner 中选中所有角色

    • 打开关卡蓝图,在图表中 右键 → 选择 Create References to selected Actors

    • 这将为每个选中的角色创建一个引用节点。

  3. 添加按键事件

    • 在图表中右键 → 搜索并添加键盘事件(如 123 按键事件)

  4. 添加 Get Player Controller 节点

    • 在图表中右键 → 搜索并添加 Get Player Controller 节点

    • 玩家控制器负责将玩家输入传递给被控制的 Pawn

  5. 添加 Possess 节点

    • 从 Get Player Controller 的 Return Value 拖出连线 → 搜索并添加 Possess 节点

  6. 连接逻辑

    • 将每个按键事件连接到对应的 Possess 节点

    • 将每个角色引用节点的输出连接到对应 Possess 节点的 In Pawn 输入

  7. 编译并测试

    • 点击 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++ 中使用,等效代码为:

cpp
#include "Kismet/GameplayStatics.h"

ACharacter* MyCharacter = UGameplayStatics::GetPlayerCharacter(this, 0);
  • this 是 WorldContextObject

  • 0 是 Player Index

  • 返回类型是 ACharacter*,如果不是 Character 则返回 nullptr

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容