游戏背包系统,Unity NGUI实现(下)

上一篇已经介绍了如何 让物体可以移动,交互,这一篇将会介绍物品如何添加到背包里。

思路是这样

写一个用于管理背包功能的脚本挂载在 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;

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值