使用unity的API   NavMesh.CalculateTriangulation 可以获取NavMesh数据

首先 我们创建一个新的工程 保存一个test场景

unity A*寻路 (一)导出NavMesh数据-LMLPHP

然后在场景中添加一个Plane作为地面可以寻路,添加几个cube作为障碍物,添加一个灯光  如图

unity A*寻路 (一)导出NavMesh数据-LMLPHP

点击左上角Window->Navigation     打开Navigation窗口

选中plane对象设置参数 如图

unity A*寻路 (一)导出NavMesh数据-LMLPHP

同样的操作选中cube设置参数 不过Navigation Area参数为Not Walkable

最后点击右下角Back按钮

烘焙成功 在Naviagtion窗口激活状态下 Scene视图如下

unity A*寻路 (一)导出NavMesh数据-LMLPHP

寻路准备工作已经完成

现在我们需要获取到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 = ; 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 = ; i < navMeshTriangulation.indices.Length;)
{
streamWriter.WriteLine("f " + (navMeshTriangulation.indices[i] + ) + " " + (navMeshTriangulation.indices[i + ] + ) + " " + (navMeshTriangulation.indices[i + ] + ));
i = i + ;
} streamWriter.Flush();
streamWriter.Close(); AssetDatabase.Refresh(); Debug.Log("NavMesh Export Success");
}
}

点击NavMesh-> Export 按钮 导出NavMesh数据 保存在obj文件夹

unity A*寻路 (一)导出NavMesh数据-LMLPHP

注意:

1.如果obj文件夹不存在 会报错

2.obj文件导入unity时会自动生成一个Materials文件里面有一个材质球 可以自己删除

链接: https://pan.baidu.com/s/1u4m4HYTGuoLwTg7U66a_Cg 密码: u81j

04-16 04:34