wangguan
2020-11-04 2ae9edd5bfd8b8baabb8cd995485f9ade4faebc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
 
namespace GAP_ParticleSystemController{
 
    public static class SaveParticleSystemScript{        
 
        public static void SaveVFX (GameObject prefabVFX, List<ParticleSystemOriginalSettings> psOriginalSettingsList) {
            var prefabFolderPath = GetPrefabFolder (prefabVFX);
            #if UNITY_EDITOR
            if (!Directory.Exists (prefabFolderPath + "/OriginalSettings")) {
                UnityEditor.AssetDatabase.CreateFolder (prefabFolderPath, "OriginalSettings");
                Debug.Log("Created folder:  " + prefabFolderPath + "/OriginalSettings");
            }
            #endif
            
            BinaryFormatter bf = new BinaryFormatter ();            
            FileStream stream = new FileStream (prefabFolderPath + "/OriginalSettings/" + prefabVFX.name + ".dat", FileMode.Create);
 
            bf.Serialize (stream, psOriginalSettingsList);        
            stream.Close ();
 
            Debug.Log ("Original Settings of '" + prefabVFX.name + "' saved to: " + prefabFolderPath + "/OriginalSettings");
        }
 
        public static List<ParticleSystemOriginalSettings> LoadVFX (GameObject prefabVFX) {
            var prefabFolderPath = GetPrefabFolder (prefabVFX);
            
            if (File.Exists (prefabFolderPath + "/OriginalSettings/" + prefabVFX.name + ".dat")) {
                BinaryFormatter bf = new BinaryFormatter ();
                FileStream stream = new FileStream (prefabFolderPath + "/OriginalSettings/" + prefabVFX.name + ".dat", FileMode.Open);
 
                List<ParticleSystemOriginalSettings> originalSettingsList = new List<ParticleSystemOriginalSettings> (); 
                originalSettingsList = bf.Deserialize (stream) as List<ParticleSystemOriginalSettings>;
 
                stream.Close ();
                return originalSettingsList;
 
            } else {
                Debug.Log ("No saved VFX data found");
                return null;
            }
        }
 
        public static bool CheckExistingFile (GameObject prefabVFX){
            var prefabFolderPath = GetPrefabFolder (prefabVFX);
 
            if (File.Exists (prefabFolderPath + "/OriginalSettings/" + prefabVFX.name + ".dat"))
                return true;
            else
                return false;
        }
 
        static string GetPrefabFolder (GameObject prefabVFX){
            #if UNITY_EDITOR
            string prefabPath = UnityEditor.AssetDatabase.GetAssetPath (prefabVFX);
            string prefabFolderPath = Path.GetDirectoryName (prefabPath);
            return prefabFolderPath;
            #else
            return null;
            #endif
        }
    }
}