效果演示
文章目录
- 效果演示
- 系列目录
- 前言
- 箱子库存
- 源码
- 完结
系列目录
前言
欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱等功能,我会附带项目源码,以便你更好理解它。
箱子库存
新增库存箱子脚本
public class Chest : MonoBehaviour
{[SerializeField] private GameObject chestUIPrefab; // 宝箱UI预制体[SerializeField] private Transform chestUIParent; // 宝箱UI的父对象[HideInInspector] public List<Slot> allChestSlots = new List<Slot>(); // 所有宝箱槽位列表[HideInInspector] public GameObject chestInstantiatedParent; // 实例化的宝箱父对象private void Start(){chestInstantiatedParent = Instantiate(chestUIPrefab, chestUIParent.position, chestUIParent.rotation, chestUIParent);// 获取所有宝箱槽位,并添加到槽位列表中foreach (Transform childSlot in chestInstantiatedParent.transform.GetChild(1)){Slot childSlotScript = childSlot.GetComponent<Slot>();allChestSlots.Add(childSlotScript);childSlotScript.initialiseSlot();// 初始化槽位信息}chestInstantiatedParent.SetActive(false);Inventory.Instance.allInventorySlots.AddRange(allChestSlots);}
}
绘制箱子库存UI,然后做成预制体,删除原来的
配置箱子参数
修改Inventory
public List<Slot> characterInventorySlots = new List<Slot>(); // 人物槽位列表,也就是背包+快捷栏[Header("宝箱")]
public LayerMask chestLayer;
private List<Slot> chestSloats = new List<Slot>();//当前宝箱的槽位列表
private GameObject chestSlotParent;//宝箱槽位的父对象
private Chest chestInfo;public new void Awake()
{characterInventorySlots.AddRange(hotbarSlots);characterInventorySlots.AddRange(inventorySloats);//。。。
}// 显示物品名称和拾取物品
private void itemRaycast(bool hasClicked = false)
{//...if (hasClicked && Physics.Raycast(ray, out hit, raycastDistance, chestLayer) && chestSlotParent == null){chest = hit.collider.GetComponent<Chest>();openChest(chest);}
}// 打开宝箱时的操作
private void openChest(Chest chest)
{toggleInventory(true);// 打开玩家背包界面chestSloats = chest.allChestSlots;// 设置当前宝箱的槽位列表chestSlotParent = chest.chestInstantiatedParent;// 设置宝箱槽位的父对象为当前打开的宝箱界面chestSlotParent.SetActive(true);// 显示宝箱界面
}private void toggleInventory(bool enable)
{//关闭背包时,关闭所有鼠标悬停在该槽位上的标志if (!enable){foreach (Slot curSlot in allInventorySlots){curSlot.hovered = false;}}//关闭背包时,清除所有的宝箱数据if (!enable && chestSlotParent != null){chestSlotParent.SetActive(false);chestSlotParent = null;chestSloats = null;chest = null;}//...
}
修改宝箱交互层级
效果
源码
源码不出意外的话我会放在最后一节
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~