Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using UnityEngine.AI;
- using Unity.AI.Navigation;
- public class BakeNavMeshForMinimap : MonoBehaviour
- {
- [SerializeField] MeshFilter[] filter;
- [SerializeField] GameObject[] roomHolder;
- [SerializeField] NavMeshSurface surface;
- [ContextMenu("Generate Minimap Meshes")]
- void GenerateMinimapMeshes()
- {
- for (int i = 0; i < roomHolder.Length; i++)
- {
- if (roomHolder[i].TryGetComponent(out NavMeshModifier navmeshMod))
- {
- // turn on the component
- navmeshMod.enabled = true;
- surface.BuildNavMesh(); // bake mesh
- filter[i].mesh = BuildMesh(roomHolder[i].transform.position);// offset to the room pos
- navmeshMod.enabled = false;
- }
- else
- {
- Debug.LogWarning("Missing NavMeshModifier component on roomHolder " + i);
- }
- }
- }
- Mesh BuildMesh(Vector3 offset)
- {
- NavMeshData navData = surface.navMeshData;
- // load in navmesh
- NavMeshDataInstance instance = NavMesh.AddNavMeshData(navData);
- // get the data
- NavMeshTriangulation triangulation = NavMesh.CalculateTriangulation();
- Vector3[] offsetVertices = new Vector3[triangulation.vertices.Length];
- // add offset
- for (int i = 0; i < triangulation.vertices.Length; i++)
- {
- offsetVertices[i] = triangulation.vertices[i] - offset;
- }
- // remove navmeshes
- NavMesh.RemoveNavMeshData(instance);
- instance.Remove();
- // create new mesh from data
- Mesh mesh = new Mesh();
- mesh.vertices = offsetVertices;
- mesh.triangles = triangulation.indices;
- return mesh;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment