上一篇已经介绍了如何 让物体可以移动,交互,这一篇将会介绍物品如何添加到背包里。
思路是这样
写一个用于管理背包功能的脚本挂载在 Left_grid身上,定义一个数组 用来存它下面的每一个cell (格子)
因为 涉及到数量的问题, 可以用当前想要添加的物体sprite的名字 与我们遍历到的子物体sprite的名字
如果有的话就 获取它身上的脚本 执行数量添加的方法。如果没有去判断每一个格子下边是否存在子物体,没有的话就 添加到 下边作为子物体。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class knapsack : MonoBehaviour {
public Transform[] cells;
//所有装备的名称
public string[] equipmentsName;
//做好的 item预设。
public GameObject item;
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) //判断格子有没有物品
{
//如果有
myDragDropItem item= cells[i].GetComponentInChildren<myDragDropItem>();
Debug.Log(item.m_sprite.spriteName);
//判断游戏物品名字 是否跟捡到的物品一样
if (item.m_sprite.spriteName == name)
{
isFind = true;
Debug.Log("1");
item.AddCount();
break;
}
}
}
if (isFind ==false)
{
for (int i = 0; i < cells.Length; i++)
{
if (cells[i].childCount == 0)
{
//如果 下边 没有物品 添加
//该方法在 父物体下 添加 item;
GameObject go = NGUITools.AddChild(cells[i].gameObject, item);
go.GetComponent<UISprite>().spriteName = name;
go.transform.localPosition = Vector3.zero;
break;
}
}
}
}
// Use this for initialization
private void Awake()
{
cells=new Transform[transform.childCount];
for (int i = 0; i < transform.childCount; i++)
{
cells[i] = transform.GetChild(i);
}
}
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.X))
{
pickUp();
}
}
}
这里 采用随机生成名字的方法进行模拟 物品拾取 在Awake的时候赋值。
这里 的Name 要和 图集里面的name一致。
这里
//该方法在 父物体下 添加 item;
GameObject go = NGUITools.AddChild(cells[i].gameObject, item);
go.GetComponent<UISprite>().spriteName = name; 这里的 UIsprite会通过sptireName 进行更新sprite
go.transform.localPosition = Vector3.zero;