Unity2D案例补充——如何存储和加载游戏

概述

本篇博客作为上一篇文章【Unity2D案例学习——背包系统制作】(https://blog.csdn.net/qq_42896549/article/details/105033887)的补充内容,同样来自b站up主M_Studio
在之前的制作中,该项目已经可以实现在Unity引擎中的正常运作——玩家可以收集场景物品到背包中,在背包中拖拽调整物品的位置,并在数据库文件中保存这些操作数据。但将游戏导出后,运行时所作的操作并不能保存到下一次游戏的开启。因此我们需要学习保存和读取ScriptableObject

通过脚本完成数据存储和加载

1.新建一个空物体GameSaveManager,用来承载游戏保存的任务
在这里插入图片描述
2.新建脚本GameSaveManager,在其中编写相关方法来实现游戏数据的存储和加载。下面是具体的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;//使用输入输出流
using System.Runtime.Serialization.Formatters.Binary;//二进制序列化

public class GameSaveManager : MonoBehaviour
{
	public Inventory myInventory;

	public void SaveGame()
	{
		Debug.Log(Application.persistentDataPath);//显示游戏文件存储路径

		if (!Directory.Exists(Application.persistentDataPath + "/game_SaveData"))//若路径下不存在指定文件夹
		{
			Directory.CreateDirectory(Application.persistentDataPath + "/game_SaveData");//创建指定文件夹
		}

		BinaryFormatter formatter = new BinaryFormatter();//二进制序列化

		FileStream file = File.Create(Application.persistentDataPath + "/game_SaveData/inventory.txt");//创建存储文件inventory

		var json = JsonUtility.ToJson(myInventory);//将ScriptableObject(只读)转换为Json存储方法

		formatter.Serialize(file, json);//将json序列化到file中

		file.Close();//关闭文件流
	}

	public void LoadGame()
	{
		BinaryFormatter bf = new BinaryFormatter();

		if (File.Exists(Application.persistentDataPath + "/game_SaveData/inventory.txt"))//若指定文件存在
		{
			FileStream file = File.Open(Application.persistentDataPath + "/game_SaveData/inventory.txt",FileMode.Open);//打开指定文件

			//通过JsonUtility中的方法重写Inventory
			JsonUtility.FromJsonOverwrite((string)bf.Deserialize(file), myInventory);//将存储的数据反序列化并重写到Inventory中

			file.Close();
		}
	}
}

在上面的代码中,我们使用了C#中相关的序列化方法来实现游戏数据的存储。
首先,我们引用了需要存储的游戏数据对象:
在这里插入图片描述
如果是常规的类,只需要通过简单的序列化方法即可完成存储以及加载。但Inventory继承自ScriptableObject,因其特性无法直接进行序列化,故需要借助特定的方法将之转化为可序列化文件,以及通过这样的可序列化文件改写回来:
在这里插入图片描述
在这里插入图片描述
解决了ScriptableObject的存储和加载问题后,只需要借助C#中的序列化相关方法完成数据的存取就实现了对ScriptableObject的处理
我们可以在游戏中添加两个按钮来调用存储和加载游戏的方法:
在这里插入图片描述
这样导出游戏后,就可以简单的完成数据保存了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值