Example #1
0
        internal static void CollectSources(List <NavMeshBuildSource> sources, NavMeshBuilderNBLDWrapper builder)
        {
            var root = builder.GetRoot();

            foreach (var it in root)
            {
                CollectSources(it, sources, builder);
            }
        }
Example #2
0
        List <NavMeshBuildSource> CollectSources()
        {
            var sources = new List <NavMeshBuildSource>();
            var markups = new List <NavMeshBuildMarkup>();

            List <NavMeshModifier> modifiers;

            if (m_CollectObjects == CollectObjectsNBLD.Children)
            {
                modifiers = new List <NavMeshModifier>(GetComponentsInChildren <NavMeshModifier>());
                modifiers.RemoveAll(x => !x.isActiveAndEnabled);
            }
            else
            {
                modifiers = NavMeshModifier.activeModifiers;
            }

            foreach (var m in modifiers)
            {
                if ((m_LayerMask & (1 << m.gameObject.layer)) == 0)
                {
                    continue;
                }
                if (!m.AffectsAgentType(m_AgentTypeID))
                {
                    continue;
                }
                var markup = new NavMeshBuildMarkup();
                markup.root            = m.transform;
                markup.overrideArea    = m.overrideArea;
                markup.area            = m.area;
                markup.ignoreFromBuild = m.ignoreFromBuild;
                markups.Add(markup);
            }

#if UNITY_EDITOR
            if (!EditorApplication.isPlaying)
            {
                if (m_CollectObjects == CollectObjectsNBLD.All)
                {
                    UnityEditor.AI.NavMeshBuilder.CollectSourcesInStage(
                        null, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, gameObject.scene, sources);
                }
                else if (m_CollectObjects == CollectObjectsNBLD.Children)
                {
                    UnityEditor.AI.NavMeshBuilder.CollectSourcesInStage(
                        transform, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, gameObject.scene, sources);
                }
                else if (m_CollectObjects == CollectObjectsNBLD.Volume)
                {
                    Matrix4x4 localToWorld = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one);
                    var       worldBounds  = GetWorldBounds(localToWorld, new Bounds(m_Center, m_Size));

                    UnityEditor.AI.NavMeshBuilder.CollectSourcesInStage(
                        worldBounds, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, gameObject.scene, sources);
                }
                var builder = new NavMeshBuilderNBLDWrapper();
                builder.defaultArea     = defaultArea;
                builder.layerMask       = layerMask;
                builder.agentID         = agentTypeID;
                builder.useMeshPrefab   = useMeshPrefab;
                builder.overrideByGrid  = overrideByGrid;
                builder.compressBounds  = compressBounds;
                builder.overrideVector  = overrideVector;
                builder.CollectGeometry = useGeometry;
                builder.CollectBoth     = m_CollectBoth;
                builder.CollectObjects  = collectObjects;
                builder.parent          = gameObject;
                NavMeshBuilderNBLD.CollectSources(sources, builder);
            }
            else
#endif
            {
                if (m_CollectObjects == CollectObjectsNBLD.All)
                {
                    NavMeshBuilder.CollectSources(null, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, sources);
                }
                else if (m_CollectObjects == CollectObjectsNBLD.Children)
                {
                    NavMeshBuilder.CollectSources(transform, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, sources);
                }
                else if (m_CollectObjects == CollectObjectsNBLD.Volume)
                {
                    Matrix4x4 localToWorld = Matrix4x4.TRS(transform.position, transform.rotation, Vector3.one);
                    var       worldBounds  = GetWorldBounds(localToWorld, new Bounds(m_Center, m_Size));
                    NavMeshBuilder.CollectSources(worldBounds, m_LayerMask, m_UseGeometry, m_DefaultArea, markups, sources);
                }
                var builder = new NavMeshBuilderNBLDWrapper();
                builder.defaultArea     = defaultArea;
                builder.layerMask       = layerMask;
                builder.agentID         = agentTypeID;
                builder.useMeshPrefab   = useMeshPrefab;
                builder.overrideByGrid  = overrideByGrid;
                builder.compressBounds  = compressBounds;
                builder.overrideVector  = overrideVector;
                builder.CollectGeometry = useGeometry;
                builder.CollectBoth     = m_CollectBoth;
                builder.CollectObjects  = collectObjects;
                builder.parent          = gameObject;
                NavMeshBuilderNBLD.CollectSources(sources, builder);
            }
            if (m_IgnoreNavMeshAgent)
            {
                sources.RemoveAll((x) => (x.component != null && x.component.gameObject.GetComponent <NavMeshAgent>() != null));
            }

            if (m_IgnoreNavMeshObstacle)
            {
                sources.RemoveAll((x) => (x.component != null && x.component.gameObject.GetComponent <NavMeshObstacle>() != null));
            }

            AppendModifierVolumes(ref sources);

            return(sources);
        }
Example #3
0
        private static void CollectSources(GameObject root, List <NavMeshBuildSource> sources, NavMeshBuilderNBLDWrapper builder)
        {
            foreach (var modifier in root.GetComponentsInChildren <NavMeshModifier>())
            {
                if (((0x1 << modifier.gameObject.layer) & builder.layerMask) == 0)
                {
                    continue;
                }
                if (!modifier.AffectsAgentType(builder.agentID))
                {
                    continue;
                }
                int area = builder.defaultArea;

                if (modifier.overrideArea)
                {
                    area = modifier.area;
                }
                if (!modifier.ignoreFromBuild)
                {
                    if (builder.CollectGeometry == NavMeshCollectGeometry.PhysicsColliders ||
                        builder.CollectBoth)
                    {
                        CollectSources(sources, modifier, area, builder);
                    }
                    if (builder.CollectGeometry == NavMeshCollectGeometry.RenderMeshes ||
                        builder.CollectBoth)
                    {
                        var sprite = modifier.GetComponent <SpriteRenderer>();
                        if (sprite != null)
                        {
                            CollectSources(sources, sprite, area, builder);
                        }
                    }
                }
            }
            Debug.Log("Sources " + sources.Count);
        }
Example #4
0
        private static void CollectSources(List <NavMeshBuildSource> sources, NavMeshModifier modifier, int area, NavMeshBuilderNBLDWrapper builder)
        {
            var collider = modifier.GetComponent <Collider2D>();

            if (collider == null)
            {
                return;
            }

            if (collider.usedByComposite)
            {
                collider = collider.GetComponent <CompositeCollider2D>();
            }

            var src = new NavMeshBuildSource();

            src.shape = NavMeshBuildSourceShape.Mesh;
            src.area  = area;

            Mesh mesh;

            mesh = builder.GetMesh(collider);
            if (mesh == null)
            {
                Debug.Log($"{collider.name} mesh is null");
                return;
            }
            if (collider.attachedRigidbody)
            {
                src.transform = Matrix4x4.TRS(Vector3.Scale(collider.transform.position, builder.overrideVector), collider.transform.rotation, Vector3.one);
            }
            else
            {
                src.transform = Matrix4x4.identity;
            }
            src.sourceObject = mesh;
            sources.Add(src);
        }
Example #5
0
        private static void CollectSources(List <NavMeshBuildSource> sources, SpriteRenderer sprite, int area, NavMeshBuilderNBLDWrapper builder)
        {
            if (sprite == null)
            {
                return;
            }
            var src = new NavMeshBuildSource();

            src.shape = NavMeshBuildSourceShape.Mesh;
            src.area  = area;

            Mesh mesh;

            mesh = builder.GetMesh(sprite.sprite);
            if (mesh == null)
            {
                Debug.Log($"{sprite.name} mesh is null");
                return;
            }
            src.transform    = Matrix4x4.TRS(Vector3.Scale(sprite.transform.position, builder.overrideVector), sprite.transform.rotation, sprite.transform.lossyScale);
            src.sourceObject = mesh;
            sources.Add(src);
        }