NGUI制作背包

1.创建一个Sprite作为背景,再创建一个sprite作为背景的子对象,并把它设为预设体。
2.分别拖放8个格子预设体拖放到场景中,排成3行3列,并更改其名称

3.为第一个格子创建一个Sprite子对象作为背包的物品,并把它设为预设体,并更改名称。

4.为格子添加   Box Collider, 再为物品添加Box Collider 和 Drag Drop Item。

应用一下,使预设体应用上

5.运行程序,可以把物品拖放到任意格子里面。

6.把物品的Drag Drop Item 删除,为物品添加脚本实现吧物品放到任意格子里面都是居中的。

代码:

效果图:

7.拖入两个物品预设体到格子里面并将其Label更改。

8.修改物品的脚本,实现两个物品可以交换(为格子添加Tag值为Cell,物品添加Tag值为Item)。

9.修改格子脚本,按下F键,随机产生物品 

代码:

效果图:

10.修改物品脚本,完成物品个数加1的功能。
代码:


11.修改格子脚本,完成当前游戏物品的名字和我们捡到的游戏物品的名字一样时,物品个数加1;当前游戏物品的名字和我们捡到的游戏物品名字不同时,向新的格子添加物品。
代码:

  最终效果:


最终代码:
格子的代码:
using UnityEngine;
using System.Collections;
public class MyCell : MonoBehaviour {
    public GameObject[] cells;//九个格子
    public string[] itemNames;//三个物品的名称
    public GameObject item;//任意一个物品
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.F))
        {
            PickUp();
        }
    }
    void PickUp()
    {       //随机产生0,1,2,三个数其中的一个
        int index = Random.Range(0, itemNames.Length);
            //得到随机的物品名称
        string name = itemNames[index];
        bool isFind = false;//是否找到相同物品
        for (int i = 0; i < cells.Length; i++)
        {//当前格子有物品
            if (cells[i].transform.childCount > 0)
            {//获得这个脚本
              MyItem mi = cells[i].GetComponentInChildren<MyItem>();
                //如果当前格子中的物品与我们捡到的物品相同
                if (mi.sprite.spriteName == name)
                {
                    isFind = true;
                    mi.AddCount(1);
                    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;
                }
            }
        }
    }
}

物品的代码:

using UnityEngine;
using System.Collections;

//必须继承自UIDragDropItem
public class MyItem : UIDragDropItem {
    public UISprite sprite;
    public UILabel label;
    private int count = 1;
    public void AddCount(int number)
    {
        count += number;
        label.text = count + "";
    }

    //重写OnDragDropRelease方法
    protected override void OnDragDropRelease(GameObject surface)
    {
        //调用父类的方法
        base.OnDragDropRelease(surface);

        //如果格子表面的是空即检测到的是本身自己的标签
        if (surface.tag == "Cell")
        {
            //设置物品的父对象(将物品放入格子中)
            this.transform.parent = surface.transform;
            //把物品居中
            this.transform.localPosition = Vector3.zero;
        }
        //如果表面是物品
        else if (surface.tag == "Item")
        {
            //1、得到被交换的物品的父对象即格子
            Transform parent = surface.transform.parent;
            //2、将被交换的物品放到被拖动的物品的格子中
            surface.transform.parent = this.transform.parent;
            //3、将被交换的物品位置居中
            surface.transform.localPosition = Vector3.zero;
            //4、将拖动的物品放入被交换的物品的父对象上
            this.transform.parent = parent;
            //5、将拖动的物品的位置居中
            this.transform.localPosition = Vector3.zero;
        }
       
    }
}



































  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值