| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | using System;using UnityEngine;using UnityEngine.AI;namespace Unity.AI.Navigation.Samples{    /// <summary>    /// Update a NavMeshSurface with Volume object collection    /// </summary>    [DefaultExecutionOrder(-102)]    public class NavMeshSurfaceVolumeUpdater : MonoBehaviour    {        [SerializeField]        NavMeshAgent trackedAgent;        NavMeshSurface m_Surface;        Vector3 m_VolumeSize;                void Awake()        {            m_Surface = GetComponent<NavMeshSurface>();        }        void OnEnable()        {            m_VolumeSize = m_Surface.size;            m_Surface.center = QuantizedCenter();            m_Surface.BuildNavMesh();        }        void Update()        {            UpdateNavMeshOnCenterOrSizeChange();        }        void UpdateNavMeshOnCenterOrSizeChange()        {            var updatedCenter = QuantizedCenter();            var updateNavMesh = false;                        if (m_Surface.center != updatedCenter)            {                m_Surface.center = updatedCenter;                updateNavMesh = true;            }            if (m_Surface.size != m_VolumeSize)            {                m_VolumeSize = m_Surface.size;                updateNavMesh = true;            }            if (updateNavMesh)                m_Surface.UpdateNavMesh(m_Surface.navMeshData);        }            static Vector3 Quantize(Vector3 v, Vector3 quant)        {            float x = quant.x * Mathf.Floor(v.x / quant.x);            float y = quant.y * Mathf.Floor(v.y / quant.y);            float z = quant.z * Mathf.Floor(v.z / quant.z);            return new Vector3(x, y, z);        }        Vector3 QuantizedCenter()        {            // Quantize the center position to update only when there's a 10% change in position relative to size            var center = trackedAgent.transform.position;            return Quantize(center, 0.1f * m_Surface.size);        }    }}
 |