Guest User

BakeNavMeshForMinimap

a guest
Jul 3rd, 2025
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.79 KB | None | 0 0
  1. using UnityEngine;
  2. using UnityEngine.AI;
  3. using Unity.AI.Navigation;
  4.  
  5. public class BakeNavMeshForMinimap : MonoBehaviour
  6. {
  7.     [SerializeField] MeshFilter[] filter;
  8.     [SerializeField] GameObject[] roomHolder;
  9.     [SerializeField] NavMeshSurface surface;
  10.  
  11.     [ContextMenu("Generate Minimap Meshes")]
  12.     void GenerateMinimapMeshes()
  13.     {
  14.         for (int i = 0; i < roomHolder.Length; i++)
  15.         {
  16.             if (roomHolder[i].TryGetComponent(out NavMeshModifier navmeshMod))
  17.             {
  18.                 // turn on the component
  19.                 navmeshMod.enabled = true;
  20.                 surface.BuildNavMesh(); // bake mesh
  21.                 filter[i].mesh = BuildMesh(roomHolder[i].transform.position);// offset to the room pos
  22.                 navmeshMod.enabled = false;
  23.             }
  24.             else
  25.             {
  26.                 Debug.LogWarning("Missing NavMeshModifier component on roomHolder " + i);
  27.             }
  28.         }
  29.     }
  30.  
  31.     Mesh BuildMesh(Vector3 offset)
  32.     {
  33.         NavMeshData navData = surface.navMeshData;
  34.         // load in navmesh
  35.         NavMeshDataInstance instance = NavMesh.AddNavMeshData(navData);
  36.         // get the data
  37.         NavMeshTriangulation triangulation = NavMesh.CalculateTriangulation();
  38.         Vector3[] offsetVertices = new Vector3[triangulation.vertices.Length];
  39.         // add offset
  40.         for (int i = 0; i < triangulation.vertices.Length; i++)
  41.         {
  42.             offsetVertices[i] = triangulation.vertices[i] - offset;
  43.         }
  44.         // remove navmeshes
  45.         NavMesh.RemoveNavMeshData(instance);
  46.         instance.Remove();
  47.         // create new mesh from data
  48.         Mesh mesh = new Mesh();
  49.         mesh.vertices = offsetVertices;
  50.         mesh.triangles = triangulation.indices;
  51.         return mesh;
  52.     }
  53.  
  54. }
Advertisement
Add Comment
Please, Sign In to add comment