unity A*尋路 (一)導出NavMesh數據


使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM