我的上一篇博客介绍了简单的背包系统 然后这篇博客结合上一篇的背包系统
来实现一下储存和加载点这里背包系统
我们现在游戏中添两个按钮 分别是保存和加载
我的这里的加载的意思是加载上次保存的进度
我先把代码给大家贴出来 然后在进行解释
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;//转为二进制文件
public class GameSaveManmager : MonoBehaviour
{
public Inventory MyInventory;//背包系统中的背包
public Item itemgroup;//背包系统中的装备
public void SaveGame()
{
//保存游戏
Debug.Log(Application.persistentDataPath);//输出路径
if(!Directory.Exists(Application .persistentDataPath + "/game_saveDate"))
{
//没有上边文件夹 创建
Directory.CreateDirectory(Application.persistentDataPath + "/game_saveDate");
}
BinaryFormatter formatter = new BinaryFormatter();//转换为二进制
FileStream file = File.Create(Application.persistentDataPath + "/game_saveDate/inventory.txt");//其中的类型是可以自定义的
var json = JsonUtility.ToJson(MyInventory);//转换为二进制
var json2 = JsonUtility.ToJson(itemgroup);//转换为二进制
formatter.Serialize(file, json);//写入文件夹中
formatter.Serialize(file, json2);//写入文件夹中
file.Close();//文件关闭(保存)
}
public void LoadGame()
{
//加载
BinaryFormatter bf = new BinaryFormatter();
//反序列化
if(File.Exists(Application.persistentDataPath + "/game_saveDate/inventory.txt"))
{
FileStream file = File.Open(Application.persistentDataPath + "/game_saveDate/inventory.txt",FileMode.Open );
//转换为json
JsonUtility.FromJsonOverwrite((string)bf.Deserialize(file), MyInventory);
JsonUtility.FromJsonOverwrite((string)bf.Deserialize(file), itemgroup);
file.Close();
}
}
}
之后还有重要的一步 就是要在控制背包显示的代码中添加一句
if(Input.GetKeyDown(KeyCode.P))
{
isEquip = !isEquip;
InventoryManager.RefreshItem();
}
下一步我们给unity的两个按钮分别赋值 保存按钮的对应SaveGame() 保存按钮对应LoadGame()
然后 代码中注释我写很明白
** Debug.Log(Application.persistentDataPath);//输出路径**我们可以根据这句在unity的输出窗口来查看路径
然后运行游戏点击Save按钮的时候 我们按着这个路径找下去
可以看到这个文件夹
然后因为我们代码中创建了文件
FileStream file = File.Create(Application.persistentDataPath + "/game_saveDate/inventory.txt");//其中的类型是可以自定义的
我们打开这个文件会发现
这和我们创建的类型还有名称都一致
这样添加完脚本之后我们可以发现在保存之后 不管在捡到什么装备 一旦点击加载 所有数据就会回到保存时的数据
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200414102640146.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDMwMjYwMg==,size_16,color_FFFFFF,t_70
按下保存 在捡装备
按下加载
我们可能发现是一个问题
就是每个装备都有个数 只有在上边声明的装备个数才会保存
我也尝试过用数组来解决 但是 会出现意料之外的BUG
所以如果想用的话 可以多声明几个装备
之后如果我解决之后 我会在这里更新出来
如果你也是unity开发爱好者 欢迎关注我的博客 我会在这里持续更新我的学习过程
最后祝大家 头发浓密 睡眠良好 财富自由