Пример #1
0
    public AsyncOperation ResetNavMesh(AI_TYPE InType)
    {
        NavMeshDataInstance dataInstance;

        if (Map_MeshInstance.TryGetValue(InType, out dataInstance))
        {
            NavMesh.RemoveNavMeshData(dataInstance);
            Map_MeshInstance.Remove(InType);
        }

        NavMeshData meshData = new NavMeshData();

        dataInstance = NavMesh.AddNavMeshData(meshData);
        Map_MeshInstance.Add(InType, dataInstance);

        int agentIndex = (int)InType;

        List <NavMeshBuildSource> sources = new List <NavMeshBuildSource>();

        NavMeshSourceTag.Collect(ref sources, GetArea(agentIndex), InType);

        NavMeshBuildSettings defaultBuildSettings = NavMesh.GetSettingsByIndex(agentIndex);

        //print(agentIndex + "," + defaultBuildSettings.agentRadius);

        var bounds = QuantizedBounds();

        return(NavMeshBuilder.UpdateNavMeshDataAsync(meshData, defaultBuildSettings, sources, bounds));
    }
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        NavMeshSourceTag.CollectMeshes(ref m_Sources);
        NavMeshSourceTag.CollectModifierVolumes(LayerMask.GetMask("Default"), ref m_Sources);

        var defaultBuildSettings = NavMesh.GetSettingsByID(AgentID);
        var bounds = QuantizedBounds();

        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }

        /*
         * NavMeshSourceTag.Collect(ref m_Sources);
         * var defaultBuildSettings = NavMesh.GetSettingsByID(0);
         * var bounds = QuantizedBounds();
         *
         * if (asyncUpdate)
         * m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
         * else
         * NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
         */
    }
 void UpdateNavMesh()
 {
     if (navMeshIsUpdating)
     {
         if (navMeshUpdateOperation.isDone)
         {
             if (navMeshInstance.valid)
             {
                 NavMesh.RemoveNavMeshData(navMeshInstance);
             }
             navMeshInstance   = NavMesh.AddNavMeshData(navMeshData);
             navMeshIsUpdating = false;
         }
     }
     else if (navMeshHasNewData)
     {
         try {
             navMeshUpdateOperation = NavMeshBuilder.UpdateNavMeshDataAsync(navMeshData, navMeshBuildSettings, navMeshSources, worldBounds);
             navMeshIsUpdating      = true;
         } catch (Exception ex) {
             Debug.Log(ex.ToString());
         }
         navMeshHasNewData = false;
     }
 }
Пример #4
0
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        //Don't do anything if the target area hasn't changed
        if (asyncUpdate && center == (m_Tracked ? m_Tracked.position : transform.position))
        {
            return;
        }

        NavMeshSourceTag.Collect(ref m_Sources);
        var defaultBuildSettings = NavMesh.GetSettingsByIndex(0);

        defaultBuildSettings.overrideVoxelSize = true;
        defaultBuildSettings.voxelSize         = 0.4f;
        defaultBuildSettings.overrideTileSize  = true;
        defaultBuildSettings.tileSize          = 16;

        var bounds = QuantizedBounds();

        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
    }
Пример #5
0
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        var defaultBuildSettings = NavMesh.GetSettingsByID(0);
        var bounds = QuantizedBounds();

        NavMeshBuilder.CollectSources(bounds, navMeshLayers, NavMeshCollectGeometry.RenderMeshes, 0, new List <NavMeshBuildMarkup>(), m_Sources);

        for (int i = 0; i < m_Sources.Count; i++)
        {
            if (m_Sources[i].component.transform.gameObject.layer == 19)
            {
                NavMeshBuildSource m = new NavMeshBuildSource();
                m            = m_Sources[i];
                m.area       = 3;
                m_Sources[i] = m;
            }
        }
        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
    }
    private void BuildNavMesh(bool Async)
    {
        Bounds navMeshBounds = new Bounds(Player.transform.position, NavMeshSize);
        List <NavMeshBuildMarkup> markups = new List <NavMeshBuildMarkup>();

        List <NavMeshModifier> modifiers;

        for (int index = 0; index < Surfaces.Length; index++)
        {
            if (Surfaces[index].collectObjects == CollectObjects.Children)
            {
                modifiers = new List <NavMeshModifier>(GetComponentsInChildren <NavMeshModifier>());
            }
            else
            {
                modifiers = NavMeshModifier.activeModifiers;
            }

            for (int i = 0; i < modifiers.Count; i++)
            {
                if (((Surfaces[index].layerMask & (1 << modifiers[i].gameObject.layer)) == 1) &&
                    modifiers[i].AffectsAgentType(Surfaces[index].agentTypeID))
                {
                    markups.Add(new NavMeshBuildMarkup()
                    {
                        root            = modifiers[i].transform,
                        overrideArea    = modifiers[i].overrideArea,
                        area            = modifiers[i].area,
                        ignoreFromBuild = modifiers[i].ignoreFromBuild
                    });
                }
            }

            if (Surfaces[index].collectObjects == CollectObjects.Children)
            {
                NavMeshBuilder.CollectSources(transform, Surfaces[index].layerMask, Surfaces[index].useGeometry, Surfaces[index].defaultArea, markups, Sources);
            }
            else
            {
                NavMeshBuilder.CollectSources(navMeshBounds, Surfaces[index].layerMask, Surfaces[index].useGeometry, Surfaces[index].defaultArea, markups, Sources);
            }

            Sources.RemoveAll(RemoveNavMeshAgentPredicate);

            if (Async)
            {
                AsyncOperation navMeshUpdateOperation = NavMeshBuilder.UpdateNavMeshDataAsync(NavMeshDatas[index], Surfaces[index].GetBuildSettings(), Sources, navMeshBounds);
                navMeshUpdateOperation.completed += HandleNavMeshUpdate;
            }
            else
            {
                NavMeshBuilder.UpdateNavMeshData(NavMeshDatas[index], Surfaces[index].GetBuildSettings(), Sources, navMeshBounds);
                OnNavMeshUpdate?.Invoke(navMeshBounds);
            }
        }
    }
Пример #7
0
        public AsyncOperation UpdateNavMesh(NavMeshData data)
        {
            List <NavMeshBuildSource> sources = this.CollectSources();
            Bounds localBounds = new Bounds(this.m_Center, NavMeshSurface.Abs(this.m_Size));

            if (this.m_CollectObjects == CollectObjects.All || this.m_CollectObjects == CollectObjects.Children)
            {
                localBounds = this.CalculateWorldBounds(sources);
            }
            return(NavMeshBuilder.UpdateNavMeshDataAsync(data, this.GetBuildSettings(), sources, localBounds));
        }
Пример #8
0
 public static AsyncOperation UpdateNavMeshDataAsync(NavMeshData data, NavMeshBuildSettings buildSettings, List <NavMeshBuildSource> sources, Bounds localBounds)
 {
     if (data == null)
     {
         throw new ArgumentNullException("data");
     }
     if (sources == null)
     {
         throw new ArgumentNullException("sources");
     }
     return(NavMeshBuilder.UpdateNavMeshDataAsync(data, buildSettings, sources, localBounds, default(NavMeshBuildDebugSettings)));
 }
    private void BuildNavMesh(bool Async)
    {
        Bounds navMeshBounds = new Bounds(Player.transform.position, NavMeshSize);
        List <NavMeshBuildMarkup> markups = new List <NavMeshBuildMarkup>();

        List <NavMeshModifier> modifiers;

        if (Surface.collectObjects == CollectObjects.Children)
        {
            modifiers = new List <NavMeshModifier>(GetComponentsInChildren <NavMeshModifier>());
        }
        else
        {
            modifiers = NavMeshModifier.activeModifiers;
        }

        for (int i = 0; i < modifiers.Count; i++)
        {
            if (((Surface.layerMask & (1 << modifiers[i].gameObject.layer)) == 1) &&
                modifiers[i].AffectsAgentType(Surface.agentTypeID))
            {
                markups.Add(new NavMeshBuildMarkup()
                {
                    root            = modifiers[i].transform,
                    overrideArea    = modifiers[i].overrideArea,
                    area            = modifiers[i].area,
                    ignoreFromBuild = modifiers[i].ignoreFromBuild
                });
            }
        }

        if (Surface.collectObjects == CollectObjects.Children)
        {
            NavMeshBuilder.CollectSources(transform, Surface.layerMask, Surface.useGeometry, Surface.defaultArea, markups, Sources);
        }
        else
        {
            NavMeshBuilder.CollectSources(navMeshBounds, Surface.layerMask, Surface.useGeometry, Surface.defaultArea, markups, Sources);
        }

        Sources.RemoveAll(source => source.component != null && source.component.gameObject.GetComponent <NavMeshAgent>() != null);

        if (Async)
        {
            NavMeshBuilder.UpdateNavMeshDataAsync(NavMeshData, Surface.GetBuildSettings(), Sources, new Bounds(Player.transform.position, NavMeshSize));
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(NavMeshData, Surface.GetBuildSettings(), Sources, new Bounds(Player.transform.position, NavMeshSize));
        }
    }
Пример #10
0
        public AsyncOperation UpdateNavMesh(NavMeshData data)
        {
            var sources = CollectSources();
            // Use unscaled bounds - this differs in behaviour from e.g. collider components.
            // But is similar to reflection probe - and since navmesh data has no scaling support - it is the right choice here.
            var sourcesBounds = new Bounds(m_Center, Abs(m_Size));

            if (m_CollectObjects == CollectObjects.All || m_CollectObjects == CollectObjects.Children)
            {
                sourcesBounds = CalculateWorldBounds(sources);
            }

            return(NavMeshBuilder.UpdateNavMeshDataAsync(data, GetBuildSettings(), sources, sourcesBounds));
        }
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        NavMeshSourceTag1.Collect(ref m_Sources);
        var defaultBuildSettings = NavMesh.GetSettingsByID(0);
        var bounds = QuantizedBounds();

        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
    }
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        NavMeshSourceTagImproved.Collect(ref m_Sources, agentTypeID);
        var buildSettings = NavMesh.GetSettingsByID(agentTypeID);
        var bounds        = QuantizedBounds();

        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, buildSettings, m_Sources, bounds);
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, buildSettings, m_Sources, bounds);
        }
    }
Пример #13
0
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        NavMeshSourceTag.Collect(ref m_Sources); //←NavMeshSourceTagタグをセットしたオブジェクトをすべて集めてListに格納
        var defaultBuildSettings = NavMesh.GetSettingsByID(0);
        var bounds = QuantizedBounds();          //←メッシュ生成の範囲をセット

        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);    //←実際のメッシュ生成を行っている部分。
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
    }
Пример #14
0
        void UpdateNavMesh(bool asyncUpdate = false)
        {
            CollectMeshSources();


            //NavMeshSourceTag.Collect(ref m_Sources);
            var defaultBuildSettings = NavMesh.GetSettingsByID(0);

            if (asyncUpdate)
            {
                /*m_Operation = */ NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, meshSources, dungeonBounds);
            }
            else
            {
                NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, meshSources, dungeonBounds);
            }
        }
    private void UpdateNavMesh(bool isAsync = false)
    {
        NavMeshSourceTag.Collect(ref sources);
        NavMeshBuildSettings settings;

        settings = NavMesh.GetSettingsByID(0);
        Bounds bounds = QuantizeBounds();

        if (isAsync)
        {
            operation = NavMeshBuilder.UpdateNavMeshDataAsync(navMesh, settings, sources, bounds);
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(navMesh, settings, sources, bounds);
        }
    }
Пример #16
0
        void Build(bool asyncUpdate)
        {
            Bounds bounds = QuantizedBounds();
            //Use agent settings
            NavMeshBuildSettings agentBuildSettings = NavMesh.GetSettingsByID(AgentID);

            agentBuildSettings.minRegionArea = MinRegionArea;

            //Bake updated nav mesh
            if (asyncUpdate)
            {
                Operation = NavMeshBuilder.UpdateNavMeshDataAsync(TheNavMeshData, agentBuildSettings, NavMeshRegionTag.Terrains, bounds);
            }
            else
            {
                NavMeshBuilder.UpdateNavMeshData(TheNavMeshData, agentBuildSettings, NavMeshRegionTag.Terrains, bounds);
            }
        }
 void UpdateNavMesh()
 {
     if (navMeshIsUpdating)
     {
         if (navMeshUpdateOperation.isDone)
         {
             if (navMeshInstance.valid)
             {
                 NavMesh.RemoveNavMeshData(navMeshInstance);
             }
             navMeshInstance   = NavMesh.AddNavMeshData(navMeshData);
             navMeshIsUpdating = false;
         }
     }
     else if (navMeshHasNewData)
     {
         navMeshUpdateOperation = NavMeshBuilder.UpdateNavMeshDataAsync(navMeshData, navMeshBuildSettings, navMeshSources, worldBounds);
         navMeshIsUpdating      = true;
         navMeshHasNewData      = false;
     }
 }
Пример #18
0
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        m_Sources.Clear();

        BoxCollider[] bcs = GetComponentsInChildren <BoxCollider>();



        Matrix4x4 worldToLocal = transform.worldToLocalMatrix;

        foreach (BoxCollider b in bcs)
        {
            var s = new NavMeshBuildSource();
            s.shape     = NavMeshBuildSourceShape.Box;
            s.transform = b.transform.localToWorldMatrix;
            s.size      = b.size;
            s.area      = areaId;

            var m = b.transform.localToWorldMatrix;


            m_Sources.Add(s);
        }
        var defaultBuildSettings = NavMesh.GetSettingsByID(0);

        defaultBuildSettings.agentRadius   = 0.08f;
        defaultBuildSettings.minRegionArea = 0.5f;

        bounds = CalculateWorldBounds(m_Sources);

        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
    }
Пример #19
0
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        NavMeshSourceTag.Collect(ref m_Sources);
        var defaultBuildSettings = NavMesh.GetSettingsByID(0);

        defaultBuildSettings.agentClimb    = 0.5f;
        defaultBuildSettings.minRegionArea = 50000.0f;
        defaultBuildSettings.agentSlope    = 30;
        defaultBuildSettings.agentRadius   = 0.5f;
        defaultBuildSettings.voxelSize     = 0.75f;

        var bounds = QuantizedBounds();

        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
        else
        {
            //m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
    }
Пример #20
0
    void UpdateNavMesh(bool asyncUpdate = false)
    {
        NavMeshSourceTag.Collect(ref m_Sources);
        var defaultBuildSettings = NavMesh.GetSettingsByID(0);

        defaultBuildSettings.voxelSize   = voxelSize;
        defaultBuildSettings.tileSize    = tileSize;
        defaultBuildSettings.agentClimb  = agentClimb;
        defaultBuildSettings.agentRadius = agentRadius;
        defaultBuildSettings.agentHeight = agentHeight;



        var bounds = QuantizedBounds();

        if (asyncUpdate)
        {
            m_Operation = NavMeshBuilder.UpdateNavMeshDataAsync(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
        else
        {
            NavMeshBuilder.UpdateNavMeshData(m_NavMesh, defaultBuildSettings, m_Sources, bounds);
        }
    }