NGUI背包,物品随机生成
实现拖拽,物品之间互换位置。
物品上脚本KnapSackItem.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KnapSackItem : UIDragDropItem {
public UISprite sprite;//获取此物体上UISprit组件
public UILabel label;//获取表示物体数量的label组件
private int count = 1;//用来作为物体数量的计数器
public void AddCount(int number=1)
{
count += number;
label.text = count + " ";
}
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 == "KnapsackItem")
{
Transform parent = surface.transform.parent;
surface.transform.parent = this.transform.parent;
surface.transform.localPosition = Vector3.zero;
this.transform.parent = parent;
this.transform.localPosition = Vector3.zero;
}
}
}
物品面板上脚本Knapsack.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Knapsack : MonoBehaviour {
public GameObject[] cells;//需指定目标物品格子
public string[] equipmentsName;//添加几种物品的sprite名称
public GameObject item;//物品预制体
void Update () {
if (Input.GetKeyDown(KeyCode.A))//按下a键模拟拾取物品
{
Pickup();
}
}
public void Pickup()
{
int index = Random.Range(0,equipmentsName.Length);//随机拾取物品池中物体
string name = equipmentsName[index];//对应物品名称
bool isFind = false;
for (int i = 0; i < cells.Length; i++)
{
if (cells[i].transform.childCount > 0)
{
KnapSackItem item = cells[i].GetComponentInChildren<KnapSackItem>();
if (item.sprite.spriteName==name)
{
isFind = true;
item.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;
}
}
}
}
}