Exemplo n.º 1
0
    NavMeshBuildSource generateWalkablePlane()
    {
        NavMeshBuildSource result = new NavMeshBuildSource();

        Mesh mesh = new Mesh();

        Vector3 center = meshOrigin.position;

        //a quad representing the walkable area
        //0  1
        //2  3
        Vector3[] vertices = new Vector3[4];
        vertices[0] = center + new Vector3(-buildSize.x, +buildSize.y, 0);
        vertices[1] = center + new Vector3(+buildSize.x, +buildSize.y, 0);
        vertices[2] = center + new Vector3(-buildSize.x, -buildSize.y, 0);
        vertices[3] = center + new Vector3(+buildSize.x, -buildSize.y, 0);

        mesh.vertices  = vertices;
        mesh.triangles = new int[] { 0, 3, 1, 0, 2, 3 };
        mesh.RecalculateBounds();
        mesh.RecalculateNormals();

        result.shape        = NavMeshBuildSourceShape.Mesh;
        result.sourceObject = mesh;
        result.transform    = Matrix4x4.identity;
        result.area         = 0;

        return(result);
    }
Exemplo n.º 2
0
    NavMeshBuildSource generateUnreachableArea(Vector3[] deDupedVertices, int[] triangleIndices, HashSet <int> reachableVertices)
    {
        Dictionary <int, int> vertexIndexMapping = new Dictionary <int, int>();

        for (int i = 0; i < deDupedVertices.Length; i++)
        {
            if (!reachableVertices.Contains(i))
            {
                vertexIndexMapping[i] = vertexIndexMapping.Count;
            }
        }

        Mesh mesh = generateBuildSourceFromTriangulation(deDupedVertices, triangleIndices, vertexIndexMapping);

        Debug.Log(mesh.triangles.Length);

        NavMeshBuildSource reachableResult = new NavMeshBuildSource();

        reachableResult.shape        = NavMeshBuildSourceShape.Mesh;
        reachableResult.sourceObject = mesh;
        reachableResult.transform    = Matrix4x4.identity;
        reachableResult.area         = unreachableAreaIndex;

        return(reachableResult);
    }
Exemplo n.º 3
0
    public void SourcesCollected()
    {
        int count = sources.Count;

        UnityEngine.Debug.Log("Source count Pre cull : " + sources.Count);
        for (int num = sources.Count - 1; num >= 0; num--)
        {
            NavMeshBuildSource item     = sources[num];
            Matrix4x4          matrix4x = item.transform;
            Vector3            vector   = new Vector3(matrix4x[0, 3], matrix4x[1, 3], matrix4x[2, 3]);
            bool flag = false;
            foreach (AIInformationZone zone in AIInformationZone.zones)
            {
                if (Vector3Ex.Distance2D(zone.ClosestPointTo(vector), vector) <= 50f)
                {
                    flag = true;
                }
            }
            if (!flag)
            {
                sources.Remove(item);
            }
        }
        UnityEngine.Debug.Log("Source count post cull : " + sources.Count + " total removed : " + (count - sources.Count));
    }
Exemplo n.º 4
0
 public static void Collect(ref List <NavMeshBuildSource> sources)
 {
     sources.Clear();
     for (int index = 0; index < NavMeshBuildTag._meshes.Count; ++index)
     {
         NavMeshBuildTag.MeshInfo mesh = NavMeshBuildTag._meshes[index];
         if (mesh != null)
         {
             Mesh sharedMesh = mesh.Filter.get_sharedMesh();
             if (!Object.op_Equality((Object)sharedMesh, (Object)null))
             {
                 NavMeshBuildSource navMeshBuildSource = (NavMeshBuildSource)null;
                 ((NavMeshBuildSource) ref navMeshBuildSource).set_shape((NavMeshBuildSourceShape)0);
                 ((NavMeshBuildSource) ref navMeshBuildSource).set_sourceObject((Object)sharedMesh);
                 ((NavMeshBuildSource) ref navMeshBuildSource).set_transform(((Component)mesh.Filter).get_transform().get_localToWorldMatrix());
                 ((NavMeshBuildSource) ref navMeshBuildSource).set_area(mesh.Area);
                 sources.Add(navMeshBuildSource);
             }
         }
     }
     for (int index = 0; index < NavMeshBuildTag._terrains.Count; ++index)
     {
         NavMeshBuildTag.TerrainInfo terrain = NavMeshBuildTag._terrains[index];
         if (terrain != null)
         {
             NavMeshBuildSource navMeshBuildSource = (NavMeshBuildSource)null;
             ((NavMeshBuildSource) ref navMeshBuildSource).set_shape((NavMeshBuildSourceShape)1);
             ((NavMeshBuildSource) ref navMeshBuildSource).set_sourceObject((Object)terrain.Terrain.get_terrainData());
             ((NavMeshBuildSource) ref navMeshBuildSource).set_transform(Matrix4x4.TRS(((Component)terrain.Terrain).get_transform().get_position(), Quaternion.get_identity(), Vector3.get_one()));
             ((NavMeshBuildSource) ref navMeshBuildSource).set_area(terrain.Area);
             sources.Add(navMeshBuildSource);
         }
     }
 }
Exemplo n.º 5
0
        public static void Build(List <GameObject> gameObjects)
        {
            List <NavMeshBuildSource> buildSources = new List <NavMeshBuildSource>();

            for (int i = 0; i < gameObjects.Count; i++)
            {
                NavMeshBuildSource navMeshSource = new NavMeshBuildSource();
                navMeshSource.shape        = NavMeshBuildSourceShape.Mesh;
                navMeshSource.sourceObject = gameObjects[i].GetComponent <MeshFilter>().sharedMesh;
                navMeshSource.transform    = gameObjects[i].transform.localToWorldMatrix;
                navMeshSource.area         = 0;
                buildSources.Add(navMeshSource);
            }

            NavMeshBuildSettings navSetting = new NavMeshBuildSettings();

            navSetting.agentRadius = 0.4f;

            NavMeshData navData = UnityEngine.AI.NavMeshBuilder.BuildNavMeshData(
                navSetting,
                buildSources,
                new Bounds(Vector3.zero, new Vector3(10000, 10000, 10000)),
                Vector3.zero,
                Quaternion.identity
                );

            navMeshDataInstance.Remove();
            navMeshDataInstance = NavMesh.AddNavMeshData(navData);
        }
Exemplo n.º 6
0
        public static void Collect(ref List <NavMeshBuildSource> sources)
        {
            sources.Clear();

            for (var i = 0; i < Meshes.Count; i++)
            {
                MeshFilter mf = Meshes[i];
                if (mf == null)
                {
                    continue;
                }

                Mesh m = mf.sharedMesh;
                if (m == null)
                {
                    continue;
                }

                NavMeshBuildSource s = new NavMeshBuildSource();
                s.shape        = NavMeshBuildSourceShape.Mesh;
                s.sourceObject = m;
                s.transform    = mf.transform.localToWorldMatrix;
                s.area         = 0;
                sources.Add(s);
            }
        }
Exemplo n.º 7
0
        public static void Collect(ref List <NavMeshBuildSource> sources)
        {
            sources.Clear( );

            for (var i = 0; i < _meshes.Count; ++i)
            {
                var mf = _meshes[i];
                if (mf == null)
                {
                    continue;
                }

                var m = mf.sharedMesh;
                if (m == null)
                {
                    continue;
                }

                var s = new NavMeshBuildSource {
                    shape        = NavMeshBuildSourceShape.Mesh,
                    sourceObject = m,
                    transform    = mf.transform.localToWorldMatrix,
                    area         = 0
                };
                sources.Add(s);
            }
        }
Exemplo n.º 8
0
    public static void Generate()
    {
        var sources = new List <NavMeshBuildSource>();
        var meshs   = Object.FindObjectsOfType <MeshFilter>();

        foreach (var mesh in meshs)
        {
            if (!mesh.gameObject.isStatic)
            {
                continue;
            }
            var source = new NavMeshBuildSource();
            source.sourceObject = mesh.sharedMesh;
            source.area         = 0;
            source.transform    = mesh.transform.localToWorldMatrix;
            sources.Add(source);
        }
        var navMeshData = new NavMeshData();

        NavMesh.AddNavMeshData(navMeshData);
        var  id     = NavMesh.GetSettingsByID(0);
        var  bounds = new Bounds(Vector3.zero, Vector3.one * 50.0f);
        bool result = NavMeshBuilder.UpdateNavMeshData(navMeshData, id, sources, bounds);

        Debug.Log(result);
        Debug.Log(id.agentRadius);
    }
Exemplo n.º 9
0
    //----------------------------------------------------------------------------------------
    public static void CollectMeshes(ref List <NavMeshBuildSource> _sources)
    {
        _sources.Clear();
        for (var i = 0; i < Meshes.Count; ++i)
        {
            var mf = Meshes[i];

            if (mf == null)
            {
                continue;
            }

            var m = mf.sharedMesh;
            if (m == null)
            {
                continue;
            }

            var s = new NavMeshBuildSource();
            s.shape        = NavMeshBuildSourceShape.Mesh;
            s.sourceObject = m;
            s.transform    = mf.transform.localToWorldMatrix;
            var modifier = mf.GetComponent <NavMeshModifier>();
            s.area = modifier && modifier.overrideArea ? modifier.area : 0;
            _sources.Add(s);
        }
    }
Exemplo n.º 10
0
    //----------------------------------------------------------------------------------------
    public static void CollectModifierVolumes(int _layerMask, ref List <NavMeshBuildSource> _sources)
    {
        foreach (var m in VolumeModifiers)
        {
            if ((_layerMask & (1 << m.gameObject.layer)) == 0)
            {
                continue;
            }
            if (!m.AffectsAgentType(AgentTypeId))
            {
                continue;
            }

            var mcenter = m.transform.TransformPoint(m.center);
            var scale   = m.transform.lossyScale;
            var msize   = new Vector3(m.size.x * Mathf.Abs(scale.x), m.size.y * Mathf.Abs(scale.y), m.size.z * Mathf.Abs(scale.z));

            var src = new NavMeshBuildSource();
            src.shape     = NavMeshBuildSourceShape.ModifierBox;
            src.transform = Matrix4x4.TRS(mcenter, m.transform.rotation, Vector3.one);
            src.size      = msize;
            src.area      = m.area;
            _sources.Add(src);
        }
    }
Exemplo n.º 11
0
    public NavMeshBuildSource CreateNavMeshBuildSource(int area)
    {
        NavMeshBuildSource result = CreateNavMeshBuildSource();

        result.area = area;
        return(result);
    }
Exemplo n.º 12
0
    public void RebakeMesh()
    {
        area = new Bounds();

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

        foreach (Transform go in transform)
        {
            var src = new NavMeshBuildSource();
            src.transform    = go.localToWorldMatrix;
            src.shape        = NavMeshBuildSourceShape.Mesh;
            src.sourceObject = go.GetComponent <MeshFilter>().mesh;
            sources.Add(src);

            area.Encapsulate(go.GetComponent <Renderer>().bounds);
        }
        area.Expand(1);

        List <NavMeshBuildSettings> configs = new List <NavMeshBuildSettings>();

        foreach (var agent in settings)
        {
            var s = NavMesh.CreateSettings();
            s.agentClimb  = agent.climbAngle;
            s.agentRadius = agent.radius;
            s.agentSlope  = agent.jump;
            s.agentTypeID = 1;
            configs.Add(s);
        }

        NavMeshBuilder.UpdateNavMeshData(data, configs[0], sources, area);
    }
Exemplo n.º 13
0
    // Collect all the navmesh build sources for enabled objects tagged by this component
    public static void Collect(ref List<NavMeshBuildSource> sources)
    {
        sources.Clear();

        for (var i = 0; i < m_Meshes.Count; ++i)
        {
            var mf = m_Meshes[i];
            if (mf == null) continue;

            var m = mf.sharedMesh;
            if (m == null) continue;

            var s = new NavMeshBuildSource();
            s.shape = NavMeshBuildSourceShape.Mesh;
            s.sourceObject = m;
            s.transform = mf.transform.localToWorldMatrix;
            s.area = 0;
            sources.Add(s);
        }

        for (var i = 0; i < m_Terrains.Count; ++i)
        {
            var t = m_Terrains[i];
            if (t == null) continue;

            var s = new NavMeshBuildSource();
            s.shape = NavMeshBuildSourceShape.Terrain;
            s.sourceObject = t.terrainData;
            // Terrain system only supports translation - so we pass translation only to back-end
            s.transform = Matrix4x4.TRS(t.transform.position, Quaternion.identity, Vector3.one);
            s.area = 0;
            sources.Add(s);
        }
    }
Exemplo n.º 14
0
 private void AppendModifierVolumes(ref List <NavMeshBuildSource> sources)
 {
     using (List <NavMeshModifierVolume> .Enumerator enumerator = NavMeshModifierVolume.get_activeModifiers().GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             NavMeshModifierVolume current = enumerator.Current;
             if ((LayerMask.op_Implicit(this.LayerMask) & 1 << ((Component)current).get_gameObject().get_layer()) != 0 && current.AffectsAgentType(this.agentTypeId))
             {
                 Vector3 vector3_1 = ((Component)current).get_transform().TransformPoint(current.get_center());
                 if (((Bounds) ref this.Bounds).Contains(vector3_1))
                 {
                     Vector3 lossyScale = ((Component)current).get_transform().get_lossyScale();
                     Vector3 vector3_2;
                     ((Vector3) ref vector3_2).\u002Ector((float)current.get_size().x *Mathf.Abs((float)lossyScale.x), (float)current.get_size().y *Mathf.Abs((float)lossyScale.y), (float)current.get_size().z *Mathf.Abs((float)lossyScale.z));
                     NavMeshBuildSource navMeshBuildSource = (NavMeshBuildSource)null;
                     ((NavMeshBuildSource) ref navMeshBuildSource).set_shape((NavMeshBuildSourceShape)5);
                     ((NavMeshBuildSource) ref navMeshBuildSource).set_transform(Matrix4x4.TRS(vector3_1, ((Component)current).get_transform().get_rotation(), Vector3.get_one()));
                     ((NavMeshBuildSource) ref navMeshBuildSource).set_size(vector3_2);
                     ((NavMeshBuildSource) ref navMeshBuildSource).set_area(current.get_area());
                     sources.Add(navMeshBuildSource);
                 }
             }
         }
     }
 }
Exemplo n.º 15
0
    private IEnumerator CollectSourcesAsync(Action callback)
    {
        float time = Time.get_realtimeSinceStartup();

        Debug.Log((object)"Starting Navmesh Source Collecting.");
        NavMeshBuilder.CollectSources(this.Bounds, LayerMask.op_Implicit(this.LayerMask), this.NavMeshCollectGeometry, this.defaultArea, new List <NavMeshBuildMarkup>(), this.sources);
        if (Object.op_Inequality((Object)TerrainMeta.HeightMap, (Object)null))
        {
            for (float x = (float)-((Bounds) ref this.Bounds).get_extents().x; (double)x < ((Bounds) ref this.Bounds).get_extents().x; x += (float)this.CellSize)
            {
                for (float z = (float)-((Bounds) ref this.Bounds).get_extents().z; (double)z < ((Bounds) ref this.Bounds).get_extents().z; z += (float)this.CellSize)
                {
                    AsyncTerrainNavMeshBake terrainSource = new AsyncTerrainNavMeshBake(Vector3.op_Addition(((Bounds) ref this.Bounds).get_center(), new Vector3(x, 0.0f, z)), this.CellSize, this.Height, false, true);
                    yield return((object)terrainSource);

                    this.terrainBakes.Add(terrainSource);
                    NavMeshBuildSource navMeshBuildSource = terrainSource.CreateNavMeshBuildSource(true);
                    ((NavMeshBuildSource) ref navMeshBuildSource).set_area(this.defaultArea);
                    this.sources.Add(navMeshBuildSource);
                    terrainSource = (AsyncTerrainNavMeshBake)null;
                }
            }
        }
        this.AppendModifierVolumes(ref this.sources);
        float num = Time.get_realtimeSinceStartup() - time;

        if ((double)num > 0.100000001490116)
        {
            Debug.LogWarning((object)("Calling CollectSourcesAsync took " + (object)num));
        }
        if (callback != null)
        {
            callback();
        }
    }
Exemplo n.º 16
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);
        }
    }
 void AddChunkNavMesh(VoxelChunk chunk)
 {
     if (!applicationIsPlaying || (object)chunk.navMesh == null)
     {
         return;
     }
     if (chunk.navMeshSourceIndex < 0)
     {
         NavMeshBuildSource source = new NavMeshBuildSource();
         source.shape        = NavMeshBuildSourceShape.Mesh;
         source.size         = chunk.navMesh.bounds.size;
         source.sourceObject = chunk.navMesh;
         source.transform    = chunk.transform.localToWorldMatrix;
         int count = navMeshSources.Count;
         chunk.navMeshSourceIndex = count;
         navMeshSources.Add(source);
     }
     else
     {
         NavMeshBuildSource source = navMeshSources [chunk.navMeshSourceIndex];
         source.size         = chunk.navMesh.bounds.size;
         source.sourceObject = chunk.navMesh;
         source.transform    = chunk.transform.localToWorldMatrix;
         navMeshSources [chunk.navMeshSourceIndex] = source;
     }
     worldBounds.Encapsulate(chunk.mr.bounds);
     worldBounds.Expand(0.1f);
     navMeshHasNewData = true;
 }
Exemplo n.º 18
0
 private void AppendModifierVolumes(ref List <NavMeshBuildSource> sources)
 {
     foreach (NavMeshModifierVolume activeModifier in NavMeshModifierVolume.activeModifiers)
     {
         if ((this.LayerMask & 1 << (activeModifier.gameObject.layer & 31)) == 0 || !activeModifier.AffectsAgentType(this.agentTypeId))
         {
             continue;
         }
         Vector3 vector3 = activeModifier.transform.TransformPoint(activeModifier.center);
         if (!this.Bounds.Contains(vector3))
         {
             continue;
         }
         Vector3            vector31           = activeModifier.transform.lossyScale;
         Vector3            vector32           = new Vector3(activeModifier.size.x * Mathf.Abs(vector31.x), activeModifier.size.y * Mathf.Abs(vector31.y), activeModifier.size.z * Mathf.Abs(vector31.z));
         NavMeshBuildSource navMeshBuildSource = new NavMeshBuildSource()
         {
             shape     = NavMeshBuildSourceShape.ModifierBox,
             transform = Matrix4x4.TRS(vector3, activeModifier.transform.rotation, Vector3.one),
             size      = vector32,
             area      = activeModifier.area
         };
         sources.Add(navMeshBuildSource);
     }
 }
Exemplo n.º 19
0
        /*Nav Mesh*/
        public static NavMeshBuildSource CreateEmptySource()
        {
            NavMeshBuildSource emptySource = new NavMeshBuildSource();

            emptySource.sourceObject = new Mesh();
            return(emptySource);
        }
Exemplo n.º 20
0
    // Collect all the navmesh build sources for enabled objects tagged by this component
    public static void Collect(ref List <NavMeshBuildSource> sources, int InArea, AI_TYPE InType)
    {
        sources.Clear();

        for (var i = 0; i < Map_Meshes[InType].Count; ++i)
        {
            var mf = Map_Meshes[InType][i];
            if (mf == null)
            {
                continue;
            }

            var m = mf.sharedMesh;
            if (m == null)
            {
                continue;
            }

            var s = new NavMeshBuildSource();
            s.shape        = NavMeshBuildSourceShape.Mesh;
            s.sourceObject = m;
            s.transform    = mf.transform.localToWorldMatrix;
            s.area         = InArea;
            sources.Add(s);
        }
    }
Exemplo n.º 21
0
    // Collect all the navmesh build sources for enabled objects tagged by this component
    public static void Collect(ref List <NavMeshBuildSource> sources)
    {
        sources.Clear();

        for (var i = 0; i < m_Meshes.Count; ++i)
        {
            var mf = m_Meshes[i];
            if (mf == null)
            {
                continue;
            }

            var m = mf.sharedMesh;
            if (m == null)
            {
                continue;
            }

            var s = new NavMeshBuildSource();
            s.shape        = NavMeshBuildSourceShape.Mesh;
            s.sourceObject = m;
            s.transform    = mf.transform.localToWorldMatrix;
            s.area         = 0;
            sources.Add(s);
        }

        for (var i = 0; i < m_Terrains.Count; ++i)
        {
            var t = m_Terrains[i];
            if (t == null)
            {
                continue;
            }

            var s = new NavMeshBuildSource();
            s.shape        = NavMeshBuildSourceShape.Terrain;
            s.sourceObject = t.terrainData;
            // Terrain system only supports translation - so we pass translation only to back-end
            s.transform = Matrix4x4.TRS(t.transform.position, Quaternion.identity, Vector3.one);
            s.area      = 0;
            sources.Add(s);
        }

        for (var i = 0; i < m_MVolumes.Count; ++i)
        {
            var v = m_MVolumes[i];
            if (v == null)
            {
                continue;
            }

            var s = new NavMeshBuildSource();
            s.shape     = NavMeshBuildSourceShape.ModifierBox;
            s.transform = Matrix4x4.TRS(v.transform.TransformPoint(v.center), v.transform.rotation, Vector3.one);
            s.size      = new Vector3(v.size.x * Mathf.Abs(v.transform.lossyScale.x), v.size.y * Mathf.Abs(v.transform.lossyScale.y), v.size.z * Mathf.Abs(v.transform.lossyScale.z));
            s.area      = v.area;
            sources.Add(s);
        }
    }
Exemplo n.º 22
0
    // Make a build source for a box in local space
    public NavMeshBuildSource BoxSource10x10()
    {
        var src = new NavMeshBuildSource();

        src.transform = transform.localToWorldMatrix;
        src.shape     = NavMeshBuildSourceShape.Sphere;
        src.size      = new Vector3(10.0f, 10f, 10.0f);
        return(src);
    }
Exemplo n.º 23
0
    public NavMeshBuildSource CreateNavMeshBuildSource()
    {
        NavMeshBuildSource result = default(NavMeshBuildSource);

        result.transform    = Matrix4x4.TRS(pivot, Quaternion.identity, Vector3.one);
        result.shape        = NavMeshBuildSourceShape.Mesh;
        result.sourceObject = mesh;
        return(result);
    }
Exemplo n.º 24
0
    public NavMeshBuildSource BoxSource()
    {
        var src = new NavMeshBuildSource();

        src.transform = transform.localToWorldMatrix;
        src.shape     = NavMeshBuildSourceShape.Box;
        src.size      = new Vector3(GameObject.FindGameObjectWithTag("MapFloor").transform.localScale.x, GameObject.FindGameObjectWithTag("MapFloor").transform.localScale.y, GameObject.FindGameObjectWithTag("MapFloor").transform.localScale.z);
        return(src);
    }
Exemplo n.º 25
0
    // Token: 0x06000B4C RID: 2892 RVA: 0x000516E0 File Offset: 0x0004F8E0
    private void BuildTile(Pathfinding.NavMeshTile tile)
    {
        DateTime now = DateTime.Now;
        List <NavMeshBuildSource> list    = new List <NavMeshBuildSource>();
        List <NavMeshBuildMarkup> markups = new List <NavMeshBuildMarkup>();

        Pathfinding.AgentType     z        = (Pathfinding.AgentType)tile.m_tile.z;
        Pathfinding.AgentSettings settings = this.GetSettings(z);
        Bounds includedWorldBounds         = new Bounds(tile.m_center, new Vector3(this.m_tileSize, 6000f, this.m_tileSize));
        Bounds localBounds = new Bounds(Vector3.zero, new Vector3(this.m_tileSize, 6000f, this.m_tileSize));
        int    defaultArea = settings.m_canWalk ? 0 : 1;

        NavMeshBuilder.CollectSources(includedWorldBounds, this.m_layers.value, NavMeshCollectGeometry.PhysicsColliders, defaultArea, markups, list);
        if (settings.m_avoidWater)
        {
            List <NavMeshBuildSource> list2 = new List <NavMeshBuildSource>();
            NavMeshBuilder.CollectSources(includedWorldBounds, this.m_waterLayers.value, NavMeshCollectGeometry.PhysicsColliders, 1, markups, list2);
            using (List <NavMeshBuildSource> .Enumerator enumerator = list2.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    NavMeshBuildSource item = enumerator.Current;
                    item.transform *= Matrix4x4.Translate(Vector3.down * 0.2f);
                    list.Add(item);
                }
                goto IL_1AE;
            }
        }
        if (settings.m_canSwim)
        {
            List <NavMeshBuildSource> list3 = new List <NavMeshBuildSource>();
            NavMeshBuilder.CollectSources(includedWorldBounds, this.m_waterLayers.value, NavMeshCollectGeometry.PhysicsColliders, 3, markups, list3);
            if (settings.m_swimDepth != 0f)
            {
                using (List <NavMeshBuildSource> .Enumerator enumerator = list3.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        NavMeshBuildSource item2 = enumerator.Current;
                        item2.transform *= Matrix4x4.Translate(Vector3.down * settings.m_swimDepth);
                        list.Add(item2);
                    }
                    goto IL_1AE;
                }
            }
            list.AddRange(list3);
        }
IL_1AE:
        if (tile.m_data == null)
        {
            tile.m_data          = new NavMeshData();
            tile.m_data.position = tile.m_center;
        }
        this.m_buildOperation = NavMeshBuilder.UpdateNavMeshDataAsync(tile.m_data, settings.m_build, list, localBounds);
        this.m_buildTile      = tile;
    }
Exemplo n.º 26
0
    // Start is called before the first frame update
    void Awake()
    {
        Map     = Instantiate(ObjectsToPlace[2], new Vector3(10, 0, 10), Quaternion.identity);
        sources = new List <NavMeshBuildSource>();

        buildSettings = new NavMeshBuildSettings();

        source = BoxSource();
        sources.Add(source);
    }
        static NavMeshBuildSource CreateMeshSource(Mesh mesh, Matrix4x4 transform)
        {
            var source = new NavMeshBuildSource();

            source.shape        = NavMeshBuildSourceShape.Mesh;
            source.sourceObject = mesh;
            source.transform    = transform;
            source.area         = 0;
            return(source);
        }
        private void UpdateNavMesh()
        {
            _sources.Clear();

            // get all meshfilters in hierarchy
            _meshFilters = _syncManager.syncRoot.GetComponentsInChildren <MeshFilter>();

            // by pass if hierarchy contains no mesh
            if (_meshFilters.Length == 0)
            {
                return;
            }

            // initialize bounds with first renderer
            _bounds = (Bounds)_meshFilters[0].GetComponent <Renderer>()?.bounds;

            // for every mesh
            for (int i = 0; i < _meshFilters.Length; i++)
            {
                // find associated metadata
                //Metadata mData = _meshFilters[i].GetComponent<Metadata>();
                Metadata mData = _meshFilters[i].GetComponentInParent <Metadata>();

                // bypass filtered objects
                if (mData && ContainsData(mData, ignoreFilters))
                {
                    continue;
                }

                // extending bounds
                Renderer renderer = _meshFilters[i].GetComponent <Renderer>();
                _bounds.Encapsulate(renderer.bounds.min);
                _bounds.Encapsulate(renderer.bounds.max);

                // add Mesh Colliders for interacting with objects
                if (addMeshColliders)
                {
                    _meshFilters[i].gameObject.AddComponent <MeshCollider>().isTrigger = isTrigger;
                }

                Mesh m = _meshFilters[i].sharedMesh;
                if (m == null)
                {
                    continue;
                }

                NavMeshBuildSource s = new NavMeshBuildSource();
                s.shape        = NavMeshBuildSourceShape.Mesh;
                s.sourceObject = m;
                s.transform    = _meshFilters[i].transform.localToWorldMatrix;
                s.area         = (mData && ContainsData(mData, notWalkable) || mData == null && unknownIsNotWalkable) ? 1 : 0;
                _sources.Add(s);
            }
            UpdateNavMeshMesh();
        }
Exemplo n.º 29
0
        private NavMeshBuildSource CreateNavMeshBuildSource(Vector3 size, Mesh mesh, Matrix4x4 transf, int area)
        {
            NavMeshBuildSource source = new NavMeshBuildSource();

            source.shape        = NavMeshBuildSourceShape.Mesh;
            source.size         = size;
            source.sourceObject = mesh;
            source.transform    = transf;
            source.area         = 0;
            return(source);
        }
Exemplo n.º 30
0
 public void AddSourceMeshes(List <MeshFilter> meshFilters, Transform meshParentTransform)
 {
     foreach (MeshFilter meshFilter in meshFilters)
     {
         NavMeshBuildSource src = new NavMeshBuildSource();
         src.shape        = NavMeshBuildSourceShape.Mesh;
         src.area         = 0;
         src.transform    = meshParentTransform.localToWorldMatrix;
         src.sourceObject = meshFilter.sharedMesh;
         m_navMeshSources.Add(src);
     }
 }