Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- #if UNITY_EDITOR
- using UnityEditor.SceneManagement;
- using System.Xml.Serialization;
- using System.IO;
- using System.Text;
- using UnityEditor;
- #endif
- [ExecuteInEditMode]
- public class UniqueObject : MonoBehaviour
- {
- [System.Serializable]
- public class UniqueIdDatabase
- {
- public long lastIndex = 0;
- }
- public long id = -1;
- #if UNITY_EDITOR
- void Awake()
- {
- if (Application.isPlaying) return;
- if (id == -1)
- {
- id = GetUnusedID();
- EditorUtility.SetDirty(this);
- EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
- EditorSceneManager.SaveScene(EditorSceneManager.GetActiveScene());
- }
- }
- public void AssignNewID()
- {
- id = GetUnusedID();
- }
- public void Clear()
- {
- id = -1;
- }
- static XmlSerializer serializer = new XmlSerializer(typeof(UniqueIdDatabase));
- static string path = "IndexDatabase.xml";
- public static long GetUnusedID()
- {
- if (!File.Exists(path))
- {
- using (StreamWriter stream3 = new StreamWriter(path, false, Encoding.UTF8))
- {
- UniqueIdDatabase newDatabase = new UniqueIdDatabase();
- serializer.Serialize(stream3, newDatabase);
- }
- }
- // wczytaj
- var stream = new FileStream(path, FileMode.Open);
- UniqueIdDatabase loadedDatabase = serializer.Deserialize(stream) as UniqueIdDatabase;
- stream.Close();
- // zajmij ID
- UniqueIdDatabase temporaryDatabase = new UniqueIdDatabase();
- temporaryDatabase.lastIndex = loadedDatabase.lastIndex + 1;
- long idd = temporaryDatabase.lastIndex;
- using (StreamWriter stream2 = new StreamWriter(path, false, Encoding.UTF8))
- {
- serializer.Serialize(stream2, temporaryDatabase);
- }
- // zwroc zajete ID
- print("Assigned unique id : " + idd);
- return idd;
- }
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement