欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > UE5 蓝图学习计划 - Day 9:数组与跨蓝图通信

UE5 蓝图学习计划 - Day 9:数组与跨蓝图通信

2025/2/6 17:52:26 来源:https://blog.csdn.net/m0_37643873/article/details/145406931  浏览:    关键词:UE5 蓝图学习计划 - Day 9:数组与跨蓝图通信

在游戏开发中,数据存储与传递 是构建复杂系统的重要基础。UE5 蓝图提供了 数组(Array) 来存储多个数据项,并允许 跨蓝图通信(Blueprint Communication) 让不同的蓝图共享和传递数据。本篇将学习如何使用数组记录道具,并通过跨蓝图通信更新 UI,最终实现一个完整的 道具拾取系统。

理论学习

  1. 数组(Array)
    • 数组是 多个相同类型数据的集合,用于存储和管理多个对象。例如:
      • 记录玩家拾取的 道具列表。
      • 存储关卡中的 敌人 Actor,用于管理敌人状态。
    • 常见的数组操作
      • Add(增加):向数组添加元素。
      • Remove(移除):删除特定元素。
      • Contains(检查):检查数组是否包含特定元素。
      • ForEach(遍历):循环访问数组中的所有元素。
  2. 跨蓝图通信(Blueprint Communication)
    • 在 UE5 蓝图中,不同的蓝图通常需要 共享数据,例如:
      • 角色蓝图(Character)与 UI 蓝图(Widget)通信,更新道具栏。
      • 关卡蓝图(Level Blueprint)与道具蓝图(Pickup Item)交互,触发事件。
    • 常见的蓝图通信方式
      1. Direct Blueprint Communication(直接通信)
        • 适用于 两个已知蓝图实例 之间的数据交互,例如角色与 UI 之间的通信。
      2. Blueprint Interface(蓝图接口)
        • 适用于 多个蓝图共享通用方法,例如所有道具都使用同一套拾取逻辑。
      3. Event Dispatchers(事件广播)
        • 适用于 蓝图之间的事件通知,如当角色拾取道具时通知 UI 更新。

实践任务:创建道具拾取系统,并在 UI 显示拾取的物品

目标

  1. 角色拾取道具
    • 角色靠近道具时,按下 F 键拾取。
    • 拾取后,道具从场景中消失,并存入数组。
  2. 道具列表 UI
    • 使用 跨蓝图通信 将道具信息传递到 UI 蓝图。
    • 在 UI 上动态显示已拾取的道具。

步骤 1:创建道具蓝图

  1. 创建 BP_PickupItem
    1. 在 Content Browser 创建一个新的 Actor 蓝图,命名为 BP_PickupItem。
      在这里插入图片描述
    2. 在 Components 面板 添加:
      • Static Mesh(道具模型)
      • Box Collision(检测拾取范围)
        在这里插入图片描述
    3. 修改StaticMesh模型,以及Box的大小
      在这里插入图片描述

在这里插入图片描述

  1. 添加变量

    • ItemName(String):道具名称(如 “钥匙”)。
    • IsPlayerNearby(Boolean):玩家是否在拾取范围内。
      在这里插入图片描述
  2. 设定拾取逻辑
    在 事件图(Event Graph) 中:

    • OnActorBeginOverlap(进入触发区域)

      • IsPlayerNearby = True
    • OnActorEndOverlap(离开触发区域)

      • IsPlayerNearby = False
        在这里插入图片描述
    • 按 F 拾取

      • 检查 IsPlayerNearby 是否为 True
      • 调用角色蓝图的方法 AddItemToInventory (方法创建步骤在下面)
      • 销毁自身(DestroyActor)
        在这里插入图片描述

步骤 2:创建角色的道具存储

  1. 修改 BP_PlayerCharacter
    1. 在 My Blueprint 面板,添加一个新变量:

      • Inventory(Array 类型,元素为 String)。
        在这里插入图片描述
    2. 创建一个 自定义函数 AddItemToInventory:

      • 输入参数:ItemName(String)
      • 逻辑
        • 使用 Add 节点,将 ItemName 添加到 Inventory 数组。
          在这里插入图片描述

步骤 3:创建 UI 蓝图

  1. 创建WBP_Text

    1. 在 Content Browser右键,选择User Interface,选择Widget Blueprint,创建 Widget Blueprint,命名为 WBP_Text。
    2. 添加Text组件并将名称命名为ItemName,勾选Is Variable
      在这里插入图片描述
  2. 创建 WBP_Inventory

    1. 在 Content Browser右键,选择User Interface,选择Widget Blueprint,创建 Widget Blueprint,命名为 WBP_Inventory。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    2. 双击打开,在 UI 设计界面:

      • 添加 Canvas Panel (画布)。
      • 添加 Vertical Box(用于存放道具列表)勾选Is Variable。
        在这里插入图片描述
        在这里插入图片描述
  3. 点击右上角的Graph切换到蓝图界面,创建 UpdateInventoryUI 方法

    • 参数:InventoryArray(String 数组)
    • 逻辑
      • 清空现有 UI 列表
      • ForEach 遍历 InventoryArray
      • 创建WBP_Text 组件,并将道具名称设置给WBP_Text里的Text组件
      • 将创建的组件添加到VerticalBox中
        在这里插入图片描述
        在这里插入图片描述在这里插入图片描述

步骤 4:实现跨蓝图通信

  1. 角色调用 UI 更新
    1. 在 BP_PlayerCharacter 中:

      • 添加变量 InventoryUI(类型为 WBP_Inventory)。
        在这里插入图片描述

      • 在 Begin Play 事件中,创建 WBP_Inventory 的实例,并添加到屏幕:

      • 绑定到 InventoryUI 变量。
        在这里插入图片描述

    2. 更新 UI

      • 在 AddItemToInventory 方法中,调用 InventoryUI -> UpdateInventoryUI(Inventory)。
        在这里插入图片描述

步骤 5:测试与优化

  1. 将BP_PickupItem放到场景中,运行游戏,角色靠近道具,按 F 拾取。
  2. 拾取后,道具从场景中消失,UI 道具栏 更新。
    在这里插入图片描述

学习收获

通过今天的学习,你掌握了:

  1. 数组的基本用法(添加、移除、遍历)。
  2. 跨蓝图通信(角色和 UI 之间的数据传递)。
  3. 完整的道具拾取系统(交互、存储、UI 更新)。

下一步学习计划

接下来,我们将学习 HUD UI 设计,包括血量条、得分系统和更丰富的 UI 交互!敬请期待!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com