游戏背包简易版(1)

小编最近学了一款背包的做法,这款有个缺点不可以存储,先分享一下,可存储的等小编融会贯通后再整理一下。

首先定义类脚本:

//...................................................................Model....................................................................................

public class BackPackModel

{

    public int id;         //id
    public string name;           //名字
    public string Des;         //描述
}

//封装了链表,链表可用于存储
public class BackPackList  
{
    public List<BackPackModel> baseBackPackList = new List<BackPackModel>();
}

//类似于new一下链表,在别处调用链表就可以直接通过SavaData.saveDataList.baseBackPackList 即可
public static class SavaData
{
    public static BackPackList saveDataList;

}


//之后需要写Data脚本,在此之前需要先写一个文本文档:


里面是几个需要的道具、消耗品等


这样就可以了,接下来就需要先写一个脚本,首先先把数据读出来转成字符串,存到链表里:

//...................................................................................BackPackAccount...........................................................................

 void Awake()
    {
        TextAsset s = Resources.Load<TextAsset>("Data");
        if (!s)
        {
            return;
        }
        string json = s.text;
        //print(SavaData.saveDataList.baseBackPackList.Count);
        SavaData.saveDataList = JsonMapper.ToObject<BackPackList>(json);
        

    }            

//这个脚本只需要这一个方法,把他挂在运行一开始就会先执行的物体上,保证可以最先执行此脚本,如果不一开始就读数据接下来的运行可能会报错。


然后就可以做背包主页面了:


我做了消耗品和道具两张页面,最上面的BG是空物体,下面的xiaohaopinPanel是个Image,bg是空物体,在bg上面加两个属性??

这样的两个属性,然后在Image下面建一个Button,

像这样,做好后可拖到Resources下面做成预设物,面板上的就可以删除了,下面我们就可以动态加载生成了.

//............................................................................................BackPackManager...................................................

public class BackPackManager : MonoBehaviour {

//这两个数组是代表了,预设物生成的父物体
    public GameObject[] Bagxiaohaopin;
    public GameObject[] Bagdaoju;


//这是指的两种类型的面板

    public GameObject xiaohaopinPanel;
    public GameObject daojuPanel;
//指动态生成的预设物
    public GameObject prefab;


    //随机生成按钮
    public void RandomClick()
    {
        int i = Random.Range(0, 5);         //随机生成一个数
        if (i<3)         //如果小于3就调用Addxiaohaopin()方法
        {
            Addxiaohaopin(i);
        }
        else            //否则就调用Adddaoju()方法
        {
            Adddaoju(i);
        }
    }

//添加消耗品方法
    public void Addxiaohaopin(int id)
    {
        for (int i = 0; i < SavaData.saveDataList.baseBackPackList.Count; i++)   //先遍历链表
        {
            if (SavaData.saveDataList.baseBackPackList[i].id == id)         //要是链表的id等于传进来的id
            {
                for (int j = 0; j < Bagxiaohaopin.Length; j++)             //就遍历数组
                {
                    if (Bagxiaohaopin[j].transform.childCount == 0)           //如果数组的每一项的子物体是零,说明还没生成预设物
                    {
                        GameObject clone = Instantiate(prefab);               //克隆预设物
                        clone.transform.parent = Bagxiaohaopin[j].transform;           //设置父物体
                        clone.transform.localPosition = Vector3.zero;             //设置自身坐标
      clone.transform.GetChild(0).GetComponent<Text>().text = SavaData.saveDataList.baseBackPackList[i].name;
                        clone.transform.GetChild(1).GetComponent<Text>().text = 1+"";    
                        return;      //一定要写return不然会错!!!
                    }
                    else
                    {
  if (Bagxiaohaopin[j].transform.GetChild(0).GetChild(0).GetComponent<Text>().text == SavaData.saveDataList.baseBackPackList[i].name)
                        {
 Bagxiaohaopin[j].transform.GetChild(0).GetChild(1).GetComponent<Text>().text= (1+int.Parse(Bagxiaohaopin[j].transform.GetChild(0).GetChild(1).GetComponent<Text>().text)).ToString();
                            return;    //一定要写return不然会错!!!
                        }
                    }
                }
            }
        }
    }

//添加道具方法
    public void Adddaoju(int id)
    {
        for (int i = 0; i < SavaData.saveDataList.baseBackPackList.Count; i++)
        {
            if (SavaData.saveDataList.baseBackPackList[i].id == id)
            {
                for (int j = 0; j < Bagdaoju.Length; j++)
                {
                    if (Bagdaoju[j].transform.childCount == 0)
                    {
                        GameObject clone = Instantiate(prefab);
                        clone.transform.parent = Bagdaoju[j].transform;
                        clone.transform.localPosition = Vector3.zero;
                        clone.transform.GetChild(0).GetComponent<Text>().text = SavaData.saveDataList.baseBackPackList[i].name;
                        clone.transform.GetChild(1).GetComponent<Text>().text =  1+"";
                        return;      //一定要写return不然会错!!!
                    }
                    else
                    {
                        if (Bagdaoju[j].transform.GetChild(0).GetChild(0).GetComponent<Text>().text == SavaData.saveDataList.baseBackPackList[i].name)
                        {
                            Bagdaoju[j].transform.GetChild(0).GetChild(1).GetComponent<Text>().text = (1+int.Parse(Bagdaoju[j].transform.GetChild(0).GetChild(1).GetComponent<Text>().text)).ToString();
                            return;      //一定要写return不然会错!!!
                        }
                    }
                }
            }
        }
    }

//显示消耗品面板方法
    public void XiaohaopinPanel()
    {
        daojuPanel.SetActive(false);
    }

//显示道具面板方法
    public void DaojuPanel()
    {
        daojuPanel.SetActive(true);
    }

}


好了今天就先做到这样,下次把剩下的都做完吧!!!如果有什么疑问的可以留言,也希望不足之处能够多多给一些建议,要是觉得可以的话希望能够点赞关注哦!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值