• 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;
        }
    }
  • 相关阅读:
    GeoServer 2.2 正式版发布,GIS 服务器
    Spring Shell 1.0.0.RC1 发布
    微软发布支持Windows Desktop和F#的Visual Studio Express版本
    XINS 3.0 正式版发布,远程 API 调用规范
    YUI 3.7.2 补丁版发布
    HTML5 Boilerplate 4:改进了Apache配置和图片替换技术,并采用MIT许可证
    解决Windows Phone平台上不能枚举工程自带资源的问题
    截短 UTF8 字符串
    Spring Data Neo4j 2.1.0 RC4 发布
    GTK+ 3.5.18 发布,GUI 开发工具包
  • 原文地址:https://www.cnblogs.com/yzxhz/p/9681490.html
Copyright © 2020-2023  润新知