前言
欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱等功能,我会附带项目源码,以便你更好理解它。
快捷栏操作,并可切换手臂
绘制快捷栏UI
复制前面背包UI进行修改即可
代码控制快捷栏切换
修改Item
public class Item : MonoBehaviour { //。。。 public int equippableItemIndex = -1;//装备对应手臂的索引,-1表示该物品不可装备 }
修改Inventory
[Header("UI")] public List<Slot> hotbarSlots = new List<Slot>();//快捷栏的槽位列表 [Header("可装备的物品")] public List<GameObject> equippableItems = new List<GameObject>(); // 通常是人物手臂列表 private int curHotbarIndex = -1; // 当前选择的快捷栏索引 public void Start() { toggleInventory(false); // 初始时关闭背包界面 //合并槽位 allInventorySlots.AddRange(hotbarSlots); allInventorySlots.AddRange(inventorySloats); foreach (Slot uiSlot in allInventorySlots) // 初始化所有槽位 { uiSlot.initialiseSlot(); } } public void Update() { //。。。 for (int i = 1; i < hotbarSlots.Count + 1; i++) { if (Input.GetKeyDown(i.ToString())) { curHotbarIndex = i - 1;//设置当前选中的快捷栏索引 enableHotbarItem(curHotbarIndex);//激活快捷栏中指定索引的装备物品 } } } // 激活快捷栏中指定索引的装备物品 private void enableHotbarItem(int hotbarIndex) { // 将每个物品设为不激活状态 foreach (GameObject item in equippableItems) { item.SetActive(false); } // 根据提供的索引,从快捷栏数组中获取对应的槽位 Slot hotbarSlot = hotbarSlots[hotbarIndex]; // 检查该槽位是否含有物品 if (hotbarSlot.hasItem()) { if (hotbarSlot.getItem().equippableItemIndex != -1) { // 如果物品可装备,根据其装备索引找到对应的手臂对象,并将其设为激活状态 equippableItems[hotbarSlot.getItem().equippableItemIndex].SetActive(true); } } }
为了方便这里就不添加手臂了,直接把物体放在人物前面,实现类似抓住物品的效果
配置所有手臂参数
配置装备物品对应手臂的索引,索引要和手臂的位置对应
配置好快捷栏插槽数据
效果
快捷栏显示选中效果
绘制选中效果UI图
添加一个图片,并把透明度调高,然后把选中效果图x轴默认调很大,这样我们默认就看不到选中效果了,后面再用代码重新定位选中效果图即可
代码重新定位选中效果图
修改Inventory
public Transform selectedItemImage; // 选中框图 // 激活快捷栏中指定索引的装备物品 private void enableHotbarItem(int hotbarIndex) { // 将每个物品设为不激活状态 foreach (GameObject item in equippableItems) { item.SetActive(false); } // 根据提供的索引,从快捷栏数组中获取对应的槽位 Slot hotbarSlot = hotbarSlots[hotbarIndex]; selectedItemImage.transform.position = hotbarSlots[hotbarIndex].transform.position;//重新定位选中框图位置 //。。。 }
配置参数
效果
源码
源码不出意外的话我会放在最后一节