美文网首页
18NGUI之背包系统

18NGUI之背包系统

作者: _谭小坤 | 来源:发表于2017-02-14 20:07 被阅读79次

    NGUI背包系统的制作##

    效果展示

    一、背包系统的搭建##

    背包格子的搭建

    二、格子里面物品(预制物的制作)##

    1. 格子里面的物体需要实现可以在格子里面拖拽,如果是空的格子可以替换位子,如果有另外一个物品需要实现交换物品,如果是拉在间隙部分,或者背包系统以外就回归到原来位子。
      2.数量Label的位置,可以坐在物体上,也可以放在格子上。
    预制物的制作
    预制物上的脚本:
    public class DragTest : UIDragDropItem {
    
        public UISprite sprite;
        public UILabel label;
        int num = 1;
        public void AddCount(int number=1)
        {
            num += number;
            label.text = num + "";
        }
    
    
    
        protected override void OnDragDropRelease(GameObject surface)
        {
            base.OnDragDropRelease(surface);
            //print(surface);
            if (surface.tag == "cell"||surface.tag==null)
            {
                this.transform.parent = surface.transform;
                transform.localPosition = Vector3.zero;
            }
            else if (surface.tag == "UIRoot" || surface.tag == null)
            {
                transform.localPosition = Vector3.zero;
            }
            else//必须给物体添加tag值不然的话。。。拖拽到window外面去的话就会报错。。。。
            {
                Transform temp = surface.transform.parent;
                surface.transform.parent = transform.parent;
                transform.parent = temp;
                surface.transform.localPosition = Vector3.zero;
                transform.localPosition = Vector3.zero;
            }
    
        }
    }
    
    
    

    三、对格子及其物品的管理##

    对格子的管理
    脚本控制:
    public class KnapsackAdd : MonoBehaviour
    {
    
        public GameObject[] cells;
    
        public GameObject item;
        public string[] equpimentsName;//承储物品的名字
    
    
        void Start()
        {
            
    
        }
    
        // Update is called once per frame
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.X))
            {
                PickUp();
            }
        }
    
        void PickUp()
        {
            int random = Random.Range(0, equpimentsName.Length);
            string name = equpimentsName[random];
            bool isFind = false;
            for (int i = 0; i < cells.Length; i++)
            {
                if (cells[i].transform.childCount > 0)
                {
                    DragTest testDrage = cells[i].transform.GetComponentInChildren<DragTest>();
                    if (testDrage.sprite.spriteName == name)
                    {
                        testDrage.AddCount();
                        isFind = true;
                        break;
                    }
                }
            }
            if (isFind == false)
            {
                for (int i = 0; i < cells.Length; i++)
                {
                    if (cells[i].transform.childCount==0)
                    {
                        GameObject go = NGUITools.AddChild(cells[i], item);
                        go.GetComponent<UISprite>().spriteName = name;
                        go.transform.localPosition = Vector3.zero;
                        break;
                    }
                    
                }
            }
    
        }
    
    }
    

    四、总结难点##

    1.进行交互的物体,必须添加boxcollider;
    2.实现在不同的脚本上获取需要的脚本的信息;

    相关文章

      网友评论

          本文标题:18NGUI之背包系统

          本文链接:https://www.haomeiwen.com/subject/dxkfwttx.html