这个是目录
-
- 前言
- UI搭建
- 捡起物品的逻辑
- 实时显示物品更新
前言
Hello and welcome back 送大家个迟来的国庆节祝福 国庆节出去玩了鸽了一段时间,今天我们来讲一下主角物品栏的课程,主要内容是物品栏的建立,物品的捡起,捡起物品后ui栏显示相应的物品
UI搭建
我们先来建立一个空物体 命名Canvas(我这里这样做是为了后期方便管理不同的canvas 如果不考虑后续维护的话可以直接create一个canvas)然后创建子物体canvas 命名为MainCanvas,证明是主界面的canvas 内部属性设为下图就可以

然后我们创建子物体UIInventory,添加cs文件UIInventory.cs,image和grid layout group
我们先来写uiinventory的逻辑
这个代码目前的作用是监测主角的位置,如果主角的位置特别靠下的话 就把这个ui显示到最上端,防止ui遮住主角
inventoryDragItem是拖拽物体后显示的对应的物品,我们这里可以做一个预制体来让它根据拖拽物体的id自动生成相对应的物java零基础小游戏体,我们可以做一个canvas 子物体添加一个image,然后拖拽到prefab中

image选择sprite是inventoryBar ,这个是ui的背景图,
grid layout group的作用是对其子物体按照该component来布局,成品如下图

效果图如下

然后我们创建12个子物体来显示捡到的物品 我们先来创建一个image 添加代码inventorysort.cs,负责相应位置物体的逻辑,在子节点添加image 取名为InventoryHighLight,负责高光显示,添加子物体textmeshpro,负责显示物品的个数

代码inventorysort:

讯享网
我们来简单介绍一下这些成员变量
mainCamera就是主相机
inventorySlotHighLight 是高光的图片,如果预制体和我做的不一样不能用getchild的方法获取,可以拖拽
textMeshProUGUI 用来显示捡到物品的个数
inventorySlotImage 显示当前格子物品
inventoryBar就是它的整个ui物品栏即组件里有uiinventory的物品
sortnumber是物品栏编号 从0到11
parentItem 这个可有可无是我为了方便场景管理做的一个空物品 如果大家要用的话就建立一个tags脚本然后设置它的子成员一个string 然后在场景中建立一个空物体 把tag设置为string


这样生成的物体就会用一些逻辑就可以自动成为item的子物体了
这样我们的ui就算是建好了

捡起物品的逻辑
捡物品很简单的就给主角添加一个碰撞检测的脚本,如果这个物品可以被捡起来那么就添加到物品栏中
讯享网
code是物品编码,itemquantity是物品个数
这个代码的逻辑比较复杂,简单来介绍一下
itemDetialDic是来存放全部的物品,物品来源是之前做的那个list,key为物品id,value为物品
itemDetialList是上个课程的工具列表
inventoryLists存放的位置,0为玩家1为箱子
CreateItemDetialDic函数的作用是把工具列表的信息全部存到字典中
CreateInventoryLists是初始化主角的物品栏和箱子
GetItemDetial是根据item的code来获取相应的item
FindItemInInventory是根据item的code来判断物品栏中是否有这个物品了,如过有就返回对应的位置,没有就返回-1
AddItemAtPosition是一个多态函数,如果FindItemInInventory返回的不是-1那么证明这个物品存在背包中,只需要在相应的位置把个数加1就可以,如果是-1说明物品在该背包中不存在需要在list中添加这个物品
SetSelectedInventoryItem是设置选中的物品id
ClearSelectedInventoryItem是清除当前选中的物品id
之前的EventHandler.cs需要添加监听数量变化的事件
创建一个空物体,把InventoryManager添加到该物体上就可以实现捡起物品了,但是现在还不能更新ui,所以我们写了个DebugPrintInventoryList函数来输出当前拿到的物品
实时显示物品更新
我们打开刚才写的uiinventory.cs添加以下代码
到这里逻辑就很简单了 我们只需要先把全部的图片制空然后遍历inventoryList,把它对应的item的sprite和个数更新一下就可以了,这里全部清空再显示也是为了方便后续的拖拽换位之类的功能
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/8107.html