Equals
Determines whether two NavWorld handles refer to the same underlying NavMesh world.
Read time 3 minutesLast updated 20 days ago
Definition
- Type: Method
- Namespace: Unity.AI.Navigation.LowLevel
- Assembly: UnityEngine.AIModule
Equals(NavWorld)
Determines whether two NavWorld handles refer to the same underlying NavMesh world.
public readonly bool Equals(NavWorld other)
Parameters
The NavWorld handle to compare this one with.
Returns
Type | Description |
|---|---|
| bool | |
Remarks
The comparison checks whether both NavWorld values point to the same internal navigation system. A NavWorld obtained from a previous NavWorld.GetDefaultWorld call isn't equal to one obtained after a NavMesh.RemoveAllNavMeshData call, because the underlying world has been destroyed and re-created.
Examples
using UnityEngine;using UnityEngine.AI;using Unity.AI.Navigation.LowLevel;public class NavWorldEqualityExample : MonoBehaviour{ NavWorld m_World; int m_CachedWorldHash; void OnEnable() { m_World = NavWorld.GetDefaultWorld(); m_CachedWorldHash = m_World.GetHashCode(); Debug.Log($"Cached the NavMesh world hash {m_CachedWorldHash}"); CompareNavigationWorldToPrevious(); // Destroying all the data makes every existing handle to the old world invalid. NavMesh.RemoveAllNavMeshData(); Debug.Log($"Removed all NavMesh data."); //m_CachedWorldHash = m_World.GetHashCode(); //Debug.Log($"Cached the NavMesh world, hash {m_CachedWorldHash}"); CompareNavigationWorldToPrevious(); } public void CompareNavigationWorldToPrevious() { NavWorld currentWorld = NavWorld.GetDefaultWorld(); // Equals, == and != compare the underlying navigation system rather than the struct // copy, so two handles obtained from the same world always compare equal. if (currentWorld == m_World) { Debug.Log($"The navigation world is the same as before."); // The handles are interchangeable, so keep one and release the duplicate. currentWorld.Dispose(); return; } Debug.Log($"The world was re-created: hash {m_CachedWorldHash} became {currentWorld.GetHashCode()}"); // Release the stale handle before replacing it, otherwise its safety handle leaks. m_World.Dispose(); m_World = currentWorld; m_CachedWorldHash = m_World.GetHashCode(); } void OnDisable() { m_World.Dispose(); }}
Equals(Object)
Determines whether two NavWorld handles refer to the same underlying NavMesh world.
public override readonly bool Equals(object obj)
Parameters
An object to interpret as a NavWorld and to compare this one with.
Returns
Type | Description |
|---|---|
| bool | |
Remarks
The comparison checks whether both NavWorld values point to the same internal navigation system. A NavWorld obtained from a previous NavWorld.GetDefaultWorld call isn't equal to one obtained after a NavMesh.RemoveAllNavMeshData call, because the underlying world has been destroyed and re-created.
Examples
using UnityEngine;using UnityEngine.AI;using Unity.AI.Navigation.LowLevel;public class NavWorldEqualityExample : MonoBehaviour{ NavWorld m_World; int m_CachedWorldHash; void OnEnable() { m_World = NavWorld.GetDefaultWorld(); m_CachedWorldHash = m_World.GetHashCode(); Debug.Log($"Cached the NavMesh world hash {m_CachedWorldHash}"); CompareNavigationWorldToPrevious(); // Destroying all the data makes every existing handle to the old world invalid. NavMesh.RemoveAllNavMeshData(); Debug.Log($"Removed all NavMesh data."); //m_CachedWorldHash = m_World.GetHashCode(); //Debug.Log($"Cached the NavMesh world, hash {m_CachedWorldHash}"); CompareNavigationWorldToPrevious(); } public void CompareNavigationWorldToPrevious() { NavWorld currentWorld = NavWorld.GetDefaultWorld(); // Equals, == and != compare the underlying navigation system rather than the struct // copy, so two handles obtained from the same world always compare equal. if (currentWorld == m_World) { Debug.Log($"The navigation world is the same as before."); // The handles are interchangeable, so keep one and release the duplicate. currentWorld.Dispose(); return; } Debug.Log($"The world was re-created: hash {m_CachedWorldHash} became {currentWorld.GetHashCode()}"); // Release the stale handle before replacing it, otherwise its safety handle leaks. m_World.Dispose(); m_World = currentWorld; m_CachedWorldHash = m_World.GetHashCode(); } void OnDisable() { m_World.Dispose(); }}