DynamicNavMeshObject.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using UnityEngine;
  2. namespace Unity.AI.Navigation.Samples
  3. {
  4. /// <summary>
  5. /// Component for moving GameObjects within a NavMesh.
  6. /// Requests a NavMesh update whenever its owning GameObject has stopped moving.
  7. /// </summary>
  8. [RequireComponent(typeof(Rigidbody))]
  9. [RequireComponent(typeof(NavMeshModifier))]
  10. public class DynamicNavMeshObject : MonoBehaviour
  11. {
  12. Rigidbody m_Rigidbody;
  13. NavMeshModifier m_NavMeshModifier;
  14. bool m_WasMoving;
  15. void Start()
  16. {
  17. m_Rigidbody = GetComponent<Rigidbody>();
  18. m_NavMeshModifier = GetComponent<NavMeshModifier>();
  19. m_NavMeshModifier.enabled = true;
  20. m_WasMoving = !m_Rigidbody.IsSleeping();
  21. }
  22. void Update()
  23. {
  24. bool isMoving = !m_Rigidbody.IsSleeping() && m_Rigidbody.velocity.sqrMagnitude > 0.1f;
  25. if ((m_WasMoving && !isMoving) || (!m_WasMoving && isMoving))
  26. {
  27. m_NavMeshModifier.ignoreFromBuild = isMoving;
  28. GloballyUpdatedNavMeshSurface.RequestNavMeshUpdate();
  29. }
  30. m_WasMoving = isMoving;
  31. }
  32. }
  33. }