效果演示
文章目录
- 效果演示
- 系列目录
- 前言
- 物品堆叠
- 源码
- 完结
系列目录
前言
欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱等功能,我会附带项目源码,以便你更好理解它。
物品堆叠
修改Inventory
// 放下正在拖拽的背包图标
private void dropInventoryIcon()
{
// 重置我们的拖拽物品变量
dragIconImage.sprite = null;
dragIconImage.color = new Color(1, 1, 1, 0); // 使图标不可见
for (int i = 0; i < allInventorySlots.Count; i++)
{
Slot curSlot = allInventorySlots[i]; // 获取当前遍历到的槽位
if (curSlot.hovered) // 如果鼠标悬停在当前槽位上
{
if (curSlot.hasItem()) // 如果该槽位已经有物品
{
Item itemToSwap = curSlot.getItem(); // 获取该槽位的物品
//如果两个物品相同,且可堆叠
if (itemToSwap.name == currentDraggedItem.name && itemToSwap.currentQuantity != itemToSwap.maxQuantity)
{
int leftoverQuantity = currentDraggedItem.currentQuantity;//当前拖拽物品数量
int freeSpaceInSlot = itemToSwap.maxQuantity - itemToSwap.currentQuantity;//目标物品差多少满堆叠
if (freeSpaceInSlot >= leftoverQuantity)
{
itemToSwap.currentQuantity += leftoverQuantity;
Destroy(currentDraggedItem);
allInventorySlots[currentDragSlotIndex].setItem(null);
allInventorySlots[i].updateData();
resetDragVariables();
return;
}
else
{
itemToSwap.currentQuantity = itemToSwap.maxQuantity;//设置目标物品为最大堆叠
allInventorySlots[i].updateData();
currentDraggedItem.currentQuantity = currentDraggedItem.currentQuantity - freeSpaceInSlot;
allInventorySlots[currentDragSlotIndex].setItem(currentDraggedItem);
resetDragVariables();
return;
}
}
else
{
//交互物品
curSlot.setItem(currentDraggedItem); // 将拖拽的物品放入当前槽位
allInventorySlots[currentDragSlotIndex].setItem(itemToSwap); // 将被交换的物品放回原来的拖拽槽位
resetDragVariables(); // 重置拖拽相关的变量
return;
}
}
else // 如果槽位为空,则直接放置物品
{
curSlot.setItem(currentDraggedItem);
resetDragVariables(); // 重置拖拽相关的变量
return;
}
}
}
// 如果没有悬停在任何槽位上(即放置位置无效),则将物品放回原来的槽位
allInventorySlots[currentDragSlotIndex].setItem(currentDraggedItem);
resetDragVariables();
}
效果
源码
源码不出意外的话我会放在最后一节
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~