【Unity&NGUI】背包单格中最大数量怎么设置

制作的时候主要是使用了SIKI的36_NGUI_开发背包捡起物品的功能,完成物品的累加和新添

参考了其他的网络文章资料

Unity3D--UGUI背包系统(三)


Backpack1是背包装备栏


Backpack1设置如下,挂载了Knapsack脚本

【Unity&NGUI】背包单格中最大数量怎么设置_第1张图片

其中Item物体变量,赋值为ClothItem物体,如果拾取了物体,则创建一个此物体的克隆,然后对应不同的参数


ClothItem物体设置如下所示碰撞器一定要是(Trigger)

【Unity&NGUI】背包单格中最大数量怎么设置_第2张图片


思路是,每个格子如果有物体则新建一个Item物体为预制体ClothItem

当然,使用代码在场景中创建的都是ClothItem(Clone),他的克隆物体


Item物体为预制体ClothItem的Knapsack Item设置了物体的

【Unity&NGUI】背包单格中最大数量怎么设置_第3张图片

返回一个布尔变量 如果 不满,则为假,满则为真

【Unity&NGUI】背包单格中最大数量怎么设置_第4张图片


----------------------------------------Backpack1的Knapsack脚本

捡起了一个物体,开始判断每个格子里面是否有 子物体

如果没有子物体,在这个格子上+1

如果有子物体,判断是否是相同的物体

不是相同的物体,判断下一个物体,如果下一个格子上有物体且为相同物体且为   该物体没有满

则+1

如果格子上有物体且是相同物体,并且 到达最大的组数 ,则进行下一轮的FOR循环判断

【Unity&NGUI】背包单格中最大数量怎么设置_第5张图片

public void Pickup()
    {
        int index = Random.Range (0,equipmentsName.Length);
        string name = equipmentsName[index];

            for(int i=0;i < cells.Length;i++)
            {
                if(cells[i].transform.childCount>0)
                {
                    //如果有,则 判断当前游戏物品的名字。获得其 物品 脚本的名字
                    KnapsackItem item = cells[i].GetComponentInChildren();
                    //判断当前游戏物品的名字 跟我们的捡到的名字是否一样
                    if(item.sprite.spriteName == name )
                    {
                        if (cells[i].GetComponentInChildren().ItemFull())
                        {
                            continue;
                        }//
                        else
                        {
                            item.AddCount(1);
                             break;//这个break的作用是用于跳出循环,即找到了,就退出该循环,等待下一次按键反馈
                       }//
                        
                    }//
                }//
                else if(cells[i].transform.childCount == 0)
                {
                     AddChildGO( i, name);
                    break;
                }//
            }//

        
    }//

    private void AddChildGO(int ACGO_i,string ACGO_name)
    {
        //当前物品栏位置没有物品
        //添加捡起来的物品
        //判断是否格子为空物体,布尔变量isFind控制只执行一次
        GameObject go = NGUITools.AddChild(cells[ACGO_i], item);//ACGO_i = i;
        go.GetComponent().spriteName = ACGO_name;//ACGO_name = name;
        go.transform.localPosition = Vector3.zero;
    }

    //从第 i= y开始找到第一个空格子 或者 是同名的 格子
    private int  findemptycell(string S_fec,int y)
    {
        int findcell = 0;
        for (; y < cells.Length; y++)
        {
            int cell_childcount = cells[y].transform.childCount;
            KnapsackItem cell_child_KI = cells[y].GetComponentInChildren();
            string cell_child_spritename = cells[y].GetComponentInChildren().spriteName;
            //遍历每个格子,找到空格子
            if (cell_childcount == 0)
            {
                findcell = y;
                break;
            }//
            else if(cell_child_spritename == S_fec)//同名的 格子
            {
                if (!cell_child_KI.ItemFull())//格子不满
                {//为不满,则执行
                    findcell = y;
                    break;
                }
                else if (cell_child_KI.ItemFull())//格子为满
                {//满,则继续执行 遍历格子的循环,判断
                    continue;
                }
            }
            else
            {
                findcell = -1;//没有找到符合条件的格子则为 -1
                break;
            }
        }//
        return findcell;
    }
    
    //判断是否每个格子都有物品,满格子
    private void isFull()
    {
        int isFullInt = 0;
        for (int i=0; i < cells.Length; i++)
        {
            if(cells[i].transform.childCount>0)
            {
                isFullInt++;
            }
            if(isFullInt == cells.Length)
            {
                isfull = true;
            }
        }
        print ("BagisFull?"+isfull);
    }//



背包系统常见的问题:

【Unity&NGUI】背包拖拽功能问题

【Unity经验】NGUI物品拖拽物品出现的问题

背包系统的小技巧:

【Unity小技巧】拖动大量物体

背包系统的功能实现:

【Unity】NGUI背包系统——背包整理按钮的改进

【Unity】NGUI背包系统——背包整理按钮的实现





你可能感兴趣的:(Unity,NGUI,Unity教程,代码分析,Unity精灵,Unity对象)