当前位置:   article > 正文

学习记录:unity的json存储_unity system.json

unity system.json

1效果展示

 2代码展示(备注很详细)

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using System.IO;
  6. //将类序列化到文件中,同时序列化到编辑器中
  7. [System.Serializable]
  8. public class PlayerCoin{
  9. public int count;
  10. public string name;
  11. public bool isWinner;
  12. }
  13. //存储一系列类数据,必须创建一个链表,链表必须存在在类中,才能被序列化
  14. public class PlayerCoinList
  15. {
  16. public List<PlayerCoin> playerCoinList = new List<PlayerCoin>();
  17. }
  18. public class DataSaveManager : MonoBehaviour
  19. {
  20. public PlayerCoinList list = new PlayerCoinList();
  21. PlayerCoin knight; //保存骑士
  22. PlayerCoin wizzard; //保存巫师
  23. public Text knightCoin; //骑士的金币数量的显示文字
  24. public Text wizzardCoin; //巫师的金币数量的显示文字
  25. // Start is called before the first frame update
  26. void Start()
  27. {
  28. //创建json数据,只需要创建一次就行
  29. // GenerateData();
  30. //数据的读取
  31. LoadDate();
  32. }
  33. // Update is called once per frame
  34. void Update()
  35. {
  36. }
  37. #region 生成实例并赋初值
  38. void GenerateData()
  39. {
  40. knight = new PlayerCoin();
  41. knight.count = 0;
  42. knight.name = "Knight";
  43. knight.isWinner = false;
  44. wizzard = new PlayerCoin();
  45. wizzard.count = 0;
  46. wizzard.name = "Wizzard";
  47. wizzard.isWinner = false;
  48. list.playerCoinList.Add(knight);
  49. list.playerCoinList.Add(wizzard);
  50. }
  51. #endregion
  52. #region 金币增加按钮事件
  53. //按钮事件:点击按钮时金币数量的增加
  54. public void OnClickCoin(string _player)
  55. {
  56. if (_player.Equals("Knight"))
  57. {
  58. knight.count += 1;
  59. knightCoin.text = knight.count.ToString();
  60. }else if (_player.Equals("Wizzard"))
  61. {
  62. wizzard.count += 1;
  63. wizzardCoin.text = wizzard.count.ToString();
  64. }
  65. }
  66. #endregion
  67. #region 数据存储
  68. void SaveData()
  69. {
  70. //将list转化成一个json文件
  71. string json = JsonUtility.ToJson(list,true);
  72. //设置保存的路径
  73. string filePath = Application.streamingAssetsPath + "/playCoinList.json";
  74. //文件的写入
  75. using(StreamWriter sw = new StreamWriter(filePath))
  76. {
  77. sw.WriteLine(json);
  78. sw.Close();
  79. sw.Dispose();
  80. }
  81. }
  82. #endregion
  83. #region 保存按钮事件
  84. public void OnClickQuit()
  85. {
  86. //数据的存储
  87. SaveData();
  88. //退出游戏
  89. UnityEditor.EditorApplication.isPlaying = false; //编辑器下退出游戏
  90. Application.Quit();
  91. }
  92. #endregion
  93. #region 数据的读取
  94. void LoadDate()
  95. {
  96. string json;
  97. string filePath = Application.streamingAssetsPath + "/playCoinList.json";
  98. //检测json文件是否存在
  99. if (File.Exists(filePath))
  100. {
  101. //json文件存在,直接进行数据读取
  102. using (StreamReader sr = new StreamReader(filePath))
  103. {
  104. json = sr.ReadToEnd();
  105. sr.Close();
  106. }
  107. //将json文件转化为内存中的一个变量
  108. list = JsonUtility.FromJson<PlayerCoinList>(json);
  109. //将读取的数据赋值
  110. knight = list.playerCoinList[0];
  111. wizzard = list.playerCoinList[1];
  112. //更新文本显示
  113. knightCoin.text = knight.count.ToString();
  114. wizzardCoin.text = wizzard.count.ToString();
  115. }
  116. else
  117. {
  118. //json文件不存在,先创建,再进行读取
  119. GenerateData();
  120. }
  121. }
  122. #endregion
  123. }

3Unity界面

 脚本挂载在manager这个空物体上,对应的按钮添加对应的事件(注意:在金币增加按钮事件的添加时:输入的string的字符串必须与代码中一致)

4程序包链接

链接:https://pan.baidu.com/s/1a9x6Jmbh8o9L1Q54tqED6Q 
提取码:jl98

(ps:在哔哩哔哩找了一个视频学习的,视频链接也放这了:【UNITY教程】第1集 使用JSON存储数据_哔哩哔哩_bilibili

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号