18NGUI之背包系统

2017-02-14  本文已影响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.实现在不同的脚本上获取需要的脚本的信息;

上一篇下一篇

猜你喜欢

热点阅读