使用unity的API NavMesh.CalculateTriangulation 可以獲取NavMesh數據
首先 我們創建一個新的工程 保存一個test場景
然后在場景中添加一個Plane作為地面可以尋路,添加幾個cube作為障礙物,添加一個燈光 如圖
點擊左上角Window->Navigation 打開Navigation窗口
選中plane對象設置參數 如圖
同樣的操作選中cube設置參數 不過Navigation Area參數為Not Walkable
最后點擊右下角Back按鈕
烘焙成功 在Naviagtion窗口激活狀態下 Scene視圖如下
尋路准備工作已經完成
現在我們需要獲取到NavMesh數據
在工程中添加代碼
代碼如下:
using System.IO; using UnityEditor; using UnityEngine.SceneManagement; using UnityEngine; //navmesh導出數據 public class NavMeshExport : MonoBehaviour { [MenuItem("NavMesh/Export")] static void Export() { Debug.Log("NavMesh Export Start"); NavMeshTriangulation navMeshTriangulation = NavMesh.CalculateTriangulation(); //文件路徑 路徑文件夾不存在會報錯 string path = Application.dataPath + "/AStar/obj/" + SceneManager.GetActiveScene().name + ".obj"; //新建文件 StreamWriter streamWriter = new StreamWriter(path); //頂點 for (int i = 0; i < navMeshTriangulation.vertices.Length; i++) { streamWriter.WriteLine("v " + navMeshTriangulation.vertices[i].x + " " + navMeshTriangulation.vertices[i].y + " " + navMeshTriangulation.vertices[i].z); } streamWriter.WriteLine("g pPlane1"); //索引 for (int i = 0; i < navMeshTriangulation.indices.Length;) { streamWriter.WriteLine("f " + (navMeshTriangulation.indices[i] + 1) + " " + (navMeshTriangulation.indices[i + 1] + 1) + " " + (navMeshTriangulation.indices[i + 2] + 1)); i = i + 3; } streamWriter.Flush(); streamWriter.Close(); AssetDatabase.Refresh(); Debug.Log("NavMesh Export Success"); } }
點擊NavMesh-> Export 按鈕 導出NavMesh數據 保存在obj文件夾
注意:
1.如果obj文件夾不存在 會報錯
2.obj文件導入unity時會自動生成一個Materials文件里面有一個材質球 可以自己刪除
鏈接: https://pan.baidu.com/s/1u4m4HYTGuoLwTg7U66a_Cg 密碼: u81j