zoukankan      html  css  js  c++  java
  • unity游戏存档

    使用Json存储在在本地

    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using UnityEngine;
    using Newtonsoft.Json;
    using System;
    using System.Text;
    using System.Linq;
    
    [Serializable]
    public class SaveGameData
    {
        public CharacterInfo characterInfo;
        public string title;
        [HideInInspector]
        public float savePosX;
        [HideInInspector]
        public float savePosY;
        [HideInInspector]
        public string path;
    }
    
    public class SaveGame 
    {
        public static int saveIndex = 1;
        public static string rootPath { get { return Application.streamingAssetsPath + "/Save"; } }
        private static List<SaveGameData> m_saveInfo;
        public static List<SaveGameData> SaveInfo
        {
            get {
                ReadPlayerAllInfo();
                return m_saveInfo;
            }
        }
    
        internal static void ClearSave(SaveGameData saveInfo)
        {
            m_saveInfo.Remove(saveInfo);
            string file= Path.GetFileName(saveInfo.path);
            string path = rootPath + "/" + file;
            if (File.Exists(path))
            {
                File.Delete(path);
            }
    #if UNITY_EDITOR
    
            path = rootPath + "/" + file + ".meta";
            if (File.Exists(path))
            {
                File.Delete(path);
            }
    #endif
    
        }
    
    
    
        public static CustomEvent onSaveSuccessful=EventFactory.CreatCustomEvent();
    
        public static void SavePlayerInfo(CharacterInfo characterInfo,Transform transform,string title)
        {
            saveIndex++;
            SaveGameData saveGame = new SaveGameData()
            {
                characterInfo = characterInfo,
                title = saveIndex + "" + title,
                savePosX = transform.position.x,
                savePosY = transform.position.y,
                path = rootPath +"/"+ saveIndex + ".json"
            };
    
            string s = JsonConvert.SerializeObject(saveGame);
            using (FileStream fs = new FileStream(saveGame.path, FileMode.OpenOrCreate, FileAccess.Write))
            {
                byte[] b = System.Text.Encoding.UTF8.GetBytes(s);
                fs.Write(b,0,b.Length);
            }      
            if (onSaveSuccessful != null)
            {
                onSaveSuccessful.Invoke();
            }
        }
    
    
        public static void ReadPlayerAllInfo()
        {
            string[] paths= Directory.GetFiles(rootPath);
            if (paths.Length == 0) return;
            List<string> validPath = new List<string>();
            for (int i = 0; i < paths.Length; i++)
            {
                if (paths[i].EndsWith(".json"))
                {
                    paths[i]=paths[i].Replace("\", "/");
                    validPath.Add(paths[i]);
                }
            }
            m_saveInfo = new List<SaveGameData>();
            saveIndex = validPath.Count+1;
            for (int i = 0; i < validPath.Count; i++)
            {
                SaveGameData loadPlayer = ReadJson(validPath[i]);
                m_saveInfo.Add(loadPlayer);
            }
        }
        static SaveGameData ReadJson(string path)
        {
            using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                byte[] data = new byte[fs.Length];
                if (data.Length==0)
                    return null;
                fs.Read(data, 0, data.Length);
                byte[] bomBuffer = new byte[] { 0xef, 0xbb, 0xbf };
                string dataStr = System.Text.Encoding.UTF8.GetString(data);
                if (data[0] == bomBuffer[0]
                    && data[1] == bomBuffer[1]
                    && data[2] == bomBuffer[2])
                {
                    int copyLength = data.Length - 3;
                    byte[] dataNew = new byte[copyLength];
                    Buffer.BlockCopy(data, 3, dataNew, 0, copyLength);
                    dataStr = System.Text.Encoding.UTF8.GetString(dataNew);
                }
                return JsonConvert.DeserializeObject<SaveGameData>(dataStr);
            }
        }
    }
  • 相关阅读:
    uvm_pkg——老板,打包带走
    uvm.sv——UVM之道
    uvm_comps.svh
    uvm_subscriber——告诉她我们来过
    uvm_monitor——借我一双慧眼
    编程面试过程中常见的10大算法(转)
    MySQL 分区表
    Nginx + Tomcat 动静分离实现负载均衡(转)
    浅析JVM内存结构和6大区域(转)
    Linux Shell编程变量赋值和引用
  • 原文地址:https://www.cnblogs.com/DazeJiang/p/14826111.html
Copyright © 2011-2022 走看看