U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 10 章 · UI 界面系统
/
第 165 课
LESSON 165 · UI 界面系统
背包与物品栏 UI
背包系统完成。下一课学 UI 拖拽。
⏱ 约 18 分钟
📊 难度:
入门
🗂 第 10 章 · UI 界面系统
📍 第 165 / 300 课
课程进度
165 / 300
🎯
本节学习目标
搭建网格物品栏
用数据驱动显示物品
实现物品交互
🚀
课程导读
背包几十个格子、不同物品不同图标——本课用“数据驱动”思路做出可扩展的物品栏。
◆
搭建物品栏 UI
格子 + 图标。
创建物品栏面板:Panel(半透明)+ 标题“背包”。
【网格容器】Panel 下建空对象 Grid,加 Grid Layout Group(第 156 课):Cell Size(如 90x90)、Spacing、Padding。
【格子背景】创建 Image 作为“格子底”(深色、九宫格边框),做成预制体 SlotPrefab。
【图标】格子内再放一个 Image(物品图标,默认空)。
【数量】可选:格子右下角 TMP 数量文字。
【批量生成格子】用代码实例化 20 个 SlotPrefab 填进 Grid(第 150 课批量技巧)。
【完成】20 个整齐格子出现。
【命名】Slot、SlotIcon、SlotCount。
【物品格数据】每个格子关联“物品数据”(ItemData,第 85 课 ScriptableObject)。
💡
背包 = 网格 + 格子预制体 + 物品数据。数据驱动才是核心。
◆
数据驱动显示物品
让物品“进格子”。
【数据结构】定义简单物品类(或复用第 85 课 ItemData):
[System.Serializable] public class Item { public string name; public Sprite icon; public int count; }
【背包数据】public List<Item> inventory = new List<Item>();
【显示逻辑】遍历格子与物品,把物品图标填进格子:
for (int i = 0; i < slots.Count; i++) {
if (i < inventory.Count) {
slots[i].icon.sprite = inventory[i].icon;
slots[i].icon.gameObject.SetActive(true);
slots[i].count.text = "x" + inventory[i].count;
} else { slots[i].icon.gameObject.SetActive(false); }
}
【添加物品】inventory.Add(new Item{...}); RefreshUI();
【移除物品】inventory.RemoveAt(index); RefreshUI();
【实战】按 G 键随机加一件物品,背包实时刷新。
【点击查看】格子加 Button/接口:点击显示物品详情(名字/描述)在侧边信息栏。
【注意】刷新 UI 要在数据变化后调用,保持“数据→UI”单向流动。
【优化】物品多时用对象池/虚拟列表(进阶)。
✅
数据驱动心法:改数据 → 调 RefreshUI() → UI 重绘。数据是源头,UI 只是“显示器”。
⚠
常见错误与排查
⛔
错误:
格子不刷新?
原因:
改了数据没调 RefreshUI
解决:
在增删物品后调用刷新方法;确认刷新逻辑正确遍历。
★
动手练习
课后小任务(做出来才算真的学会)
搭出 20 格背包
用数据驱动显示随机物品
点击格子查看物品详情
✓
本节小结
背包系统完成。下一课学 UI 拖拽。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
对话框系统
下一课 →
UI 拖拽与排序
↑