小编最近学了一款背包的做法,这款有个缺点不可以存储,先分享一下,可存储的等小编融会贯通后再整理一下。
首先定义类脚本:
//...................................................................Model....................................................................................
public class BackPackModel
{
public int id; //idpublic 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);
}
}
好了今天就先做到这样,下次把剩下的都做完吧!!!如果有什么疑问的可以留言,也希望不足之处能够多多给一些建议,要是觉得可以的话希望能够点赞关注哦!