学习目标:

如果你和我同样苦恼于游戏相关的数据怎么存储与读取,那么不妨看看这个up主有关Unity存档系统的教程。[Unity] 存档系统 Part 1 | PlayerPrefs | Unity初学者系列教程 | 数据存取 | 存档读档 | Save&Load_哔哩哔哩_bilibili在本视频中你将学到Unity引擎中三种常见的数据存储方式中的第一种:PlayerPrefs主要内容:什么是PlayerPrefs如何使用PlayerPrefsPlayerPrefs的优缺点以及适用范围构建一个基于PlayerPrefs的基础数据存取系统Unity存档系统第二部分 - JSON:BV1Cb4y1b71G————————————————————你好啊,我是阿严,一个小小的独立游戏开发者https://www.bilibili.com/video/BV1nQ4y1z7pZ/?spm_id_from=333.788.recommend_more_video.-1

这里我将up主讲到的内容作为笔记,先给大伙开个头介绍JSON。


学习内容:

这里引用以为CSDN博主给JSON的介绍(JSON 基本使用_兮动人的博客-CSDN博客_json.cn怎么用https://blog.csdn.net/qq_41684621/article/details/113851644?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165301480816781483799120%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165301480816781483799120&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-113851644-null-null.142^v10^control,157^v4^control&utm_term=JSON&spm=1018.2226.3001.4187)

JSON,全称是 JavaScript Object Notation,即 JavaScript对象标记法。

JSON是一种轻量级(Light-Meight)、基于文本的(Text-Based)、可读的(Human-Readable)格式。

JSON 的名称中虽然带有JavaScript,但这是指其语法规则是参考JavaScript对象的,而不是指只能用于JavaScript 语言。

JSON无论对于人,还是对于机器来说,都是十分便于阅读和书写的,而且相比 XML(另一种常见的数据交换格式),文件更小,因此迅速成为网络上十分流行的交换格式。

近年来JavaScript已经成为浏览器上事实上的标准语言,JavaScript 的风靡,与JSON 的流行也有密切的关系。

因为JSON本身就是参考JavaScript 对象的规则定义的,其语法与JavaScript定义对象的语法几乎完全相同。

JSON格式的创始人声称此格式永远不升级,这就表示这种格式具有长时间的稳定性,10 年前写的文件,10年后也能用,没有任何兼容性问题。

原文链接:https://blog.csdn.net/qq_41684621/article/details/113851644

了解完什么是JSON后让我们看看官方API中关于JSON的属性

转化为JSON格式,我们需要一个object类型,一个bool是为了将文本转为可读性更高的JavaScript格式

这个复写函数可以覆盖掉我们之前创建的object类型,用一个新的string类型的json来覆盖掉原有的数据

需要注意的是,转化的时候不应该用字段,这与json本身的特性有关,当你转化的时候会发现只有一个大括号,而是要将整个类一起转化,而且接受转化的数据类型必须是支持Untiy序列化,像什么static静态,readonly字段,是不能进行转化,up主非常贴心的制作了一张表格用来列出那些数据类型支持转化大伙务必要去看看。

了解上述属性和特征之类的以后,我们就可以使用JSON来存储不同类型的数据了。

代码部分:

回到Unity中我们重新写SaveSystem脚本,这里涉及到的有try,catch捕获异常语句块,Path.Combine()将两个路径目录合并起来

Application.persistentDataPath因为发布到不同平台上的目录各有不同,使用这个属性能让我们保存的数据适应不同平台上。

using UnityEngine;
using System.IO;
namespace SaveSystemTur
{public static  class SaveSystem{#region JSONpublic static void SaveByJSON(string saveFileName, object data){var json = JsonUtility.ToJson(data);var path = Path.Combine(Application.persistentDataPath + saveFileName);try{File.WriteAllText(path, json);#if UNITY_EDITORDebug.Log($"Successfully save file to {path} . ");
#endif}catch (System.Exception exception){#if UNITY_EDITORDebug.LogError($"Failed to save file to {path}\n {exception}");
#endif}}public static T LoadFromJSON<T>(string saveFileName){var path = Path.Combine(Application.persistentDataPath, saveFileName);try {var json = File.ReadAllText(path);var data = JsonUtility.FromJson<T>(json);return data;}catch(System.Exception exception){
#if UNITY_EDITORDebug.LogError($"Failed to load file to {path}\n {exception}");
#endifreturn default;}}#endregion#region DELETEpublic static void DeleteFile(string saveFileName){var path = Path.Combine(Application.persistentDataPath, saveFileName);try{File.Delete(path);}catch (System.Exception exception){
#if UNITY_EDITORDebug.LogError($"Failed to delete file to {path}\n {exception}");
#endif}}#endregion}
}

完成后我们回到NewPlayerData上,比之前更省略的是我们除了SaveData和LoadData之外,我们只用了两个两三行函数从SaveSystem上调用函数即实现了保存Json格式文件。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace SaveSystemTur
{public class NewPlayerData : MonoBehaviour{private const string PLAYER_DATA_KEY = "PlayerData";private const string PLAYER_DATA_FILE_NAME = "PlayerData.sav";#region Fields[SerializeField] string playerName = "";[SerializeField] int coin = 0;[SerializeField] int level = 0;[System.Serializable]class SaveData{public string playerName;public int playerLevel;public int playerCoin;public Vector3 playerPosition;}#endregion#region Propertriespublic string PlayerName => playerName;public int Coin => coin;public int Level => level;public Vector3 Position => transform.position;#endregion#region Save And Loadpublic void Save(){SaveByJSON();}public void Load(){LoadFromJSON();}private SaveData SavingData(){var saveData = new SaveData();saveData.playerName = playerName;saveData.playerCoin = coin;saveData.playerLevel = level;saveData.playerPosition = transform.position;return saveData;}private void LoadData(SaveData saveData){playerName = saveData.playerName;level = saveData.playerLevel;coin = saveData.playerCoin;transform.position = saveData.playerPosition;}[UnityEditor.MenuItem("Developer/Delete Player Data Prefs")]public static void DeletePlayerDataPrefs(){//PlayerPrefs.DeleteAll();PlayerPrefs.DeleteKey(PLAYER_DATA_KEY);}[UnityEditor.MenuItem("Developer/Delete Player Data Save File")]public static void DeletePlayerDataSaveFile(){//PlayerPrefs.DeleteAll();PlayerPrefs.DeleteKey(PLAYER_DATA_FILE_NAME);}#endregion#region JSONvoid SaveByJSON(){SaveSystem.SaveByJSON(PLAYER_DATA_FILE_NAME, SavingData());}void LoadFromJSON(){var saveData = SaveSystem.LoadFromJSON<SaveData>(PLAYER_DATA_FILE_NAME);LoadData(saveData);}#endregion}
}

其实可以在SaveByJSON为我们创建的文件的名字上给上保存日期

void SaveByJSON(){SaveSystem.SaveByJSON($"{System.DateTime.Now:yyyy.dd.M HH-MM-ss}.sav", SavingData());//SaveSystem.SaveByJSON(PLAYER_DATA_FILE_NAME, SavingData());}

这样我们的文件就陈宫保存在C盘了,而且也有我们按下保存的日期。

[Unity存档系统]简单介绍Unity常见存档系统二JSON以及使用方法相关推荐

  1. Android 系统简单介绍

    Android 系统简单介绍 2011年11月20日 写这篇文章的目的是为了给那些刚刚入手安 卓手机的新手们一些参考,希望他们能快速的上手 [第一期]ANDROID基础知识1~20 [第二期]继续泡! ...

  2. Unity动画系统简单介绍

    Unity动画系统知识点简单介绍(简易) 本文是学习文,其中转载某些文章,如有侵权,联系删除. 学习要点: 1.动画的分类 游戏物体的基础动画设置,UGUI设置的按钮状态,2D游戏Sprite动画,R ...

  3. [Unity实战]一个简单的unity手写摇杆[入门级][手写demo][开箱可用]

    一个简单的unity手写摇杆 1.摇杆是什么 2.常见的unity摇杆插件 3.如何做一个简单摇杆(代码) 4.效果展示 5.github 1.摇杆是什么 固定移动摇杆的意思指固定一个摇杆的贴图,操作 ...

  4. Linux系统简单介绍

    Linux系统 一,Linux系统介绍: 1.UNIX系统起源,由贝尔实验研究员丹尼斯·里奇和肯·汤普逊合作开发,并顺便开发了C语言,现主要应用于各种大型服务器,如电信,银行,各大公司的核心关键业务. ...

  5. Android 系统(87)---常见的内存泄漏原因及解决方法

    常见的内存泄漏原因及解决方法 (Memory Leak,内存泄漏) 为什么会产生内存泄漏? 当一个对象已经不需要再使用本该被回收时,另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被 ...

  6. C语言编程图书销售系统,简单的书店图书销售系统求指点

    已结贴√ 问题点数:18 回复次数:1 简单的书店图书销售系统求指点 1. 功能(需求)分析 书店为了能实现日常的经营,经常涉及到到事物及应该具有的功能是:图书入库(进书采购时).图书销售.查看图书的 ...

  7. unity GC机制简单介绍

    GC全称是garbage collection,即垃圾回收,顾名思义就是一种释放内存垃圾的机制.这种机制主要作用在堆空间上. 堆上的变量在存储的时候,主要分为以下几步: 1)首先,unity检测是否有 ...

  8. unity 等待...动画_介绍Unity 2019.1的动画索具预览包

    unity 等待...动画 The Animation Rigging package for Unity 2019.1 enables users to set up procedural moti ...

  9. unity网络开发_介绍Unity开发人员网络

    unity网络开发 演示地址 As part of a larger plan, today we launch the first iteration of the Unity Developer ...

最新文章

  1. 右键脚本html,js实现右键自定义菜单
  2. 教程 | 基于LSTM实现手写数字识别
  3. 【CCNA考试】2010-06-29-北京-987(PASS)
  4. react小测试忘记一个细节不显示
  5. Java不满足的依赖异常_不要依赖代码中的异常
  6. 主流大数据平台及解决方案对比
  7. 安装libsvm工具包
  8. javaIO流-IO基础知识指南
  9. 局域网不同网段远程桌面_自动化已非原来的自动化:看虚拟局域网技术应用到罗克韦尔的DCS...
  10. c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目
  11. NLP之分词技术理论
  12. VUE前端开发环境版本查看命令
  13. Google Sheet 学习笔记
  14. 邮箱,手机号,电话号,身份证,中文名称验证
  15. vanish_3.0_ban
  16. 数学统计--标准分数
  17. cocos2d-js 手游解密jsc和WebSocket数据aes加密解密分析②
  18. rust 输出读取文件
  19. c++第一课 输出“Hello word”
  20. iOS中使用c函数快速获取一个目录所占的空间大小

热门文章

  1. 桌面上计算机图标被误删,电脑桌面图标被误删?两个方法轻松帮你找回,根本不需要重装系统...
  2. python获取cpu温度_如何获得树莓派CPU实时温度值
  3. Android 自定义实现日历
  4. CCF公布国家集训队50进15名单!5月确定IOI2019选手!
  5. html在线编辑器合并单元格,Bootstrap实现的表格合并单元格示例
  6. (五)通过pygame搭建游戏框架
  7. mysql索引优化分析_MySQL索引优化与分析(重要)
  8. 定时器alarm函数
  9. 小记——linux定时器之alarm
  10. Docker - 编译安装nginx镜像