Advertisement
Guest User

Untitled

a guest
Mar 19th, 2016
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. #if UNITY_EDITOR
  4. using UnityEditor.SceneManagement;
  5. using System.Xml.Serialization;
  6. using System.IO;
  7. using System.Text;
  8. using UnityEditor;
  9. #endif
  10.  
  11. [ExecuteInEditMode]
  12. public class UniqueObject : MonoBehaviour
  13. {
  14.  
  15. [System.Serializable]
  16. public class UniqueIdDatabase
  17. {
  18.  
  19. public long lastIndex = 0;
  20.  
  21. }
  22.  
  23. public long id = -1;
  24.  
  25. #if UNITY_EDITOR
  26.  
  27. void Awake()
  28. {
  29.  
  30. if (Application.isPlaying) return;
  31.  
  32. if (id == -1)
  33. {
  34.  
  35. id = GetUnusedID();
  36.  
  37. EditorUtility.SetDirty(this);
  38. EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
  39. EditorSceneManager.SaveScene(EditorSceneManager.GetActiveScene());
  40.  
  41. }
  42.  
  43. }
  44.  
  45. public void AssignNewID()
  46. {
  47.  
  48. id = GetUnusedID();
  49.  
  50. }
  51.  
  52. public void Clear()
  53. {
  54.  
  55. id = -1;
  56.  
  57. }
  58.  
  59. static XmlSerializer serializer = new XmlSerializer(typeof(UniqueIdDatabase));
  60. static string path = "IndexDatabase.xml";
  61.  
  62. public static long GetUnusedID()
  63. {
  64.  
  65. if (!File.Exists(path))
  66. {
  67.  
  68. using (StreamWriter stream3 = new StreamWriter(path, false, Encoding.UTF8))
  69. {
  70. UniqueIdDatabase newDatabase = new UniqueIdDatabase();
  71. serializer.Serialize(stream3, newDatabase);
  72. }
  73.  
  74. }
  75.  
  76. // wczytaj
  77.  
  78. var stream = new FileStream(path, FileMode.Open);
  79. UniqueIdDatabase loadedDatabase = serializer.Deserialize(stream) as UniqueIdDatabase;
  80. stream.Close();
  81.  
  82. // zajmij ID
  83.  
  84. UniqueIdDatabase temporaryDatabase = new UniqueIdDatabase();
  85. temporaryDatabase.lastIndex = loadedDatabase.lastIndex + 1;
  86.  
  87. long idd = temporaryDatabase.lastIndex;
  88.  
  89. using (StreamWriter stream2 = new StreamWriter(path, false, Encoding.UTF8))
  90. {
  91. serializer.Serialize(stream2, temporaryDatabase);
  92. }
  93.  
  94. // zwroc zajete ID
  95.  
  96. print("Assigned unique id : " + idd);
  97.  
  98. return idd;
  99.  
  100. }
  101.  
  102. #endif
  103.  
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement