ObjectID.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // #define DEBUG_IDS
  2. namespace GitMerge
  3. {
  4. using UnityEngine;
  5. using UnityEditor;
  6. /// <summary>
  7. /// Struct representing a GameObject ID.
  8. /// Similar to GlobalObjectID, but used for robustness against changes to Unity's API.
  9. /// </summary>
  10. public struct ObjectID
  11. {
  12. public readonly ulong id;
  13. public readonly ulong prefabId;
  14. public ObjectID(ulong id, ulong prefabId)
  15. {
  16. this.id = id;
  17. this.prefabId = prefabId;
  18. }
  19. public override bool Equals(object obj)
  20. {
  21. if (obj == null || GetType() != obj.GetType())
  22. {
  23. return false;
  24. }
  25. var other = (ObjectID)obj;
  26. return id == other.id && prefabId == other.prefabId;
  27. }
  28. public override int GetHashCode()
  29. {
  30. return unchecked(id.GetHashCode() + prefabId.GetHashCode());
  31. }
  32. public override string ToString()
  33. {
  34. return "[" + id + (prefabId != 0 ? "/" + prefabId : "") + "]";
  35. }
  36. public static ObjectID GetFor(Object o)
  37. {
  38. var goid = GlobalObjectId.GetGlobalObjectIdSlow(o);
  39. var id = goid.targetObjectId;
  40. var prefabId = goid.targetPrefabId;
  41. return new ObjectID(id, prefabId);
  42. }
  43. #if DEBUG_IDS
  44. [MenuItem("Window/GitMerge Test ObjectID")]
  45. private static void Test()
  46. {
  47. // Debug.Log(GlobalObjectId.GetGlobalObjectIdSlow(Selection.activeGameObject));
  48. Debug.Log(GetFor(Selection.activeGameObject));
  49. }
  50. #endif
  51. }
  52. }