NGUI背包中整理背包的两种方法

Posted freedom-1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NGUI背包中整理背包的两种方法相关的知识,希望对你有一定的参考价值。

  

  方法一:

  遍历物品格子的数组,提取出每一个子对象并存入一个集合后,遍历物品格子数组,把每一个集合中的物体元素用NGUI.AddChild方法添加到格子下。

          

 //方法1:使用重新排序,有问题
        foreach (GameObject cell in cells)
        {
            if (cell.transform.childCount > 0)
            {
                itemList.Add(cell.transform.GetChild(0).gameObject);

                cell.transform.DestroyChildren();
            }
        }

        int count = 0; //计数器

        foreach (var item in itemList)
        {
            GameObject obj = NGUITools.AddChild(cells[count], item);
            obj.GetComponent<UISprite>().enabled = true;
            obj.GetComponent<ItemDrag>().enabled = true;
            obj.GetComponentInChildren<UISprite>().enabled = true;
            count++;
        }

 

  在使用第一种方法后,出现了一个问题,原本在预制体上的组件都处于不激活状态,虽然实现了重新排序,但需要把子物体中的组件重新激活。

 

方法二:

  使用类似冒泡排序的算法,冒泡排序回顾:

  https://www.cnblogs.com/shen-hua/p/5422676.html

  在整理背包的过程中,如果前一个格子没有子物体,那么就把后一个格子子物体父级设置给前一个空的格子。

  


 for (int i = 0; i < cells.Length; i++)
        {
            for (int j = 0; j < cells.Length-1; j++)
            {
                //Cells[j]为格子数组
                if (cells[j].transform.childCount<cells[j+1].transform.childCount)
                {
                    Transform child = cells[j + 1].transform.GetChild(0);
                    child.SetParent(cells[j].transform);
                    //GameObject obj = NGUITools.AddChild(cells[j], cells[j + 1].transform.GetChild(0));
                    child.localPosition = Vector3.zero;
                }
            }
        }

 

 

 


以上是关于NGUI背包中整理背包的两种方法的主要内容,如果未能解决你的问题,请参考以下文章

NGUI 简单的背包系统

unity3d 背包怎么做

背包整理(01背包,完全背包,多重背包,分组背包)(待更新)

二维背包初步

unity3d背包怎么扩容

使用喷气背包导航将自定义过渡动画添加到底部导航设置