zoukankan      html  css  js  c++  java
  • U3D游戏存档功能的实现(基于unity内置的JsonUtility读取/写入数据)

      存档功能是游戏中最常用的功能之一。

      直接上代码:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using UnityEngine;
    
    namespace TianBoWang.Function
    {
    
        /// <summary>
        /// 储存数据管理
        /// </summary>
        public class SavaDataManager :MonoBehaviour
        {
            private SaveData saveData;
    
            public string jsonName="SceneData.json";
    
            private string path;
    
            private void Awake()
            {
                path = Application.persistentDataPath + "/"+jsonName;
                saveData = LoadDataFromJson(path);
                SaveDataToJson();
            }
    
            /// <summary>
            /// 从json里面读取数据
            /// </summary>
            private SaveData LoadDataFromJson(string p)
            {
                if (File.Exists(p))
                {
                    string json = File.ReadAllText(p);
                    return JsonUtility.FromJson<SaveData>(json);
                }
                else
                {
                    return new SaveData(GameSceneManager.GoldCoin);
                }
            }
            /// <summary>
            /// 储存数据到json
            /// </summary>
            private void SaveDataToJson()
            {
              
                string json = JsonUtility.ToJson(saveData, true);
                StreamWriter sw = File.CreateText(path);
                sw.Close();
                File.WriteAllText(path, json);
            }
    
        /// <summary>
        /// 获取关卡信息
        /// </summary>
            public SceneInfo GetDirectoryState(int sceneCount)
            {
              
                saveData = LoadDataFromJson(path);
                if (saveData.sceneInfo.Count != 0)
                {
                    foreach (var item in saveData.sceneInfo)
                    {
                        if (item.currentLevel == sceneCount)
                        {
                            return item;
                        }
                    }
                }
          
                return new SceneInfo(sceneCount,new int[]{},new string[]{}); //Return clear state if there is no saved data
            }
         /// <summary>
        /// 储存关卡信息
        /// </summary>
            public void SetDirectoryState(SceneInfo current)
            {
                saveData = LoadDataFromJson(path);
                saveData.sceneInfo.RemoveAll(t => t.currentLevel == current.currentLevel); //Replace old data with new
                saveData.sceneInfo.Add(current);
                SaveDataToJson();
            }
    
    
    
         /// <summary>
        /// 储存金币数量
        /// </summary>
            public void SetCoins(int coins)
            {
    
                saveData = LoadDataFromJson(path);
                saveData.coinsCount = coins;
                SaveDataToJson();
            }
         /// <summary>
        /// 获取金币数量
        /// </summary>
            public int GetCoins()
            {
                saveData = LoadDataFromJson(path);
                return saveData.coinsCount;
            }
    
    
        }
     [Serializable]
        public struct SaveData
        {
            public int coinsCount;
            public List<SceneInfo> sceneInfo;
            public SaveData(int coins)
            {
                coinsCount = coins;
                sceneInfo = new List<SceneInfo>();
            }
        }
    
        [Serializable]
        public class SceneInfo
        {
            public SceneInfo(int curLevel, int[] pass, string[] bonus,bool isComp=false)
            {
                currentLevel = curLevel;
                passArray = pass;
                bonusArray = bonus;
                isComplate = isComp;
            }
        
            public int currentLevel;
            //这一关第几个pass通过了
            public int[] passArray;
    
            public string[] bonusArray;
    
            public bool isComplate;
        }
    }
  • 相关阅读:
    神经网络系列学习笔记(一)——神经网络之ANN学习资料汇总
    时间序列分析算法学习笔记
    推荐算法学习笔记
    神经网络系列学习笔记(二)——神经网络之DNN学习笔记
    AB test学习笔记
    大数据的存储——HBase、HIVE、MYSQL数据库学习笔记
    本地已经存在的项目如何跟github发生关联
    深度神经网络对脑电信号运动想象动作的在线解码
    脑机音乐接口,高效检测用户的情绪状态
    将深度学习技术应用于基于情境感知的情绪识别
  • 原文地址:https://www.cnblogs.com/yzxhz/p/9681490.html
Copyright © 2011-2022 走看看