summaryrefslogtreecommitdiff
path: root/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Utilities/UnityReferenceHelper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Utilities/UnityReferenceHelper.cs')
-rw-r--r--Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Utilities/UnityReferenceHelper.cs39
1 files changed, 39 insertions, 0 deletions
diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Utilities/UnityReferenceHelper.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Utilities/UnityReferenceHelper.cs
new file mode 100644
index 0000000..e4d895c
--- /dev/null
+++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Utilities/UnityReferenceHelper.cs
@@ -0,0 +1,39 @@
+using Pathfinding.Util;
+using UnityEngine;
+
+namespace Pathfinding {
+ [ExecuteInEditMode]
+ /// <summary>
+ /// Helper class to keep track of references to GameObjects.
+ /// Does nothing more than to hold a GUID value.
+ /// </summary>
+ [HelpURL("https://arongranberg.com/astar/documentation/stable/unityreferencehelper.html")]
+ public class UnityReferenceHelper : MonoBehaviour {
+ [HideInInspector]
+ [SerializeField]
+ private string guid;
+
+ public string GetGUID() => guid;
+
+ public void Awake () {
+ Reset();
+ }
+
+ public void Reset () {
+ if (string.IsNullOrEmpty(guid)) {
+ guid = Pathfinding.Util.Guid.NewGuid().ToString();
+ Debug.Log("Created new GUID - " + guid, this);
+ } else if (gameObject.scene.name != null) {
+ // Create a new GUID if there are duplicates in the scene.
+ // Don't do this if this is a prefab (scene.name == null)
+ foreach (UnityReferenceHelper urh in UnityCompatibility.FindObjectsByTypeUnsorted<UnityReferenceHelper>()) {
+ if (urh != this && guid == urh.guid) {
+ guid = Pathfinding.Util.Guid.NewGuid().ToString();
+ Debug.Log("Created new GUID - " + guid, this);
+ return;
+ }
+ }
+ }
+ }
+ }
+}