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;
}
}
}