NGUI背包系统的制作##
一、背包系统的搭建##
二、格子里面物品(预制物的制作)##
- 格子里面的物体需要实现可以在格子里面拖拽,如果是空的格子可以替换位子,如果有另外一个物品需要实现交换物品,如果是拉在间隙部分,或者背包系统以外就回归到原来位子。
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.实现在不同的脚本上获取需要的脚本的信息;