diff --git a/NavMeshComponents/Scripts/NavMeshBuilder2d.cs b/NavMeshComponents/Scripts/NavMeshBuilder2d.cs index b8f1eaa..7cdd844 100644 --- a/NavMeshComponents/Scripts/NavMeshBuilder2d.cs +++ b/NavMeshComponents/Scripts/NavMeshBuilder2d.cs @@ -190,6 +190,11 @@ public static void CollectSources(List sources, NavMeshBuild { if (builder.CollectGeometry == NavMeshCollectGeometry.PhysicsColliders) { + var tilemap = modifier.GetComponent(); + if (tilemap != null) + { + CollectTileSources(sources, tilemap, area, builder, true); + } var collider = modifier.GetComponent(); if (collider != null) { @@ -286,7 +291,7 @@ public static void CollectSources(List sources, Collider2D c builder.lookupCallback?.Invoke(collider.gameObject, src); } - public static void CollectTileSources(List sources, Tilemap tilemap, int area, NavMeshBuilder2dState builder) + public static void CollectTileSources(List sources, Tilemap tilemap, int area, NavMeshBuilder2dState builder, bool onlyTileModifier = false) { var bound = tilemap.cellBounds; @@ -323,11 +328,19 @@ public static void CollectTileSources(List sources, Tilemap continue; } + bool hadTileModifier = false; CollectTile(tilemap, builder, vec3int, size, sharedMesh, rot, ref src); if (modifierTilemap && modifierTilemap.TryGetTileModifier(vec3int, tilemap, out NavMeshModifierTilemap.TileModifier tileModifier)) { src.area = tileModifier.overrideArea ? tileModifier.area : area; - } + hadTileModifier = tileModifier.overrideArea; + } + + if (onlyTileModifier && !hadTileModifier) + { + continue; + } + sources.Add(src); builder.lookupCallback?.Invoke(tilemap.GetInstantiatedObject(vec3int), src);