Unity 匯出NavMesh 可行走區域判定 資料給伺服器使用
這個專案的客戶端使用Unity 自帶的 NavMesh 來做尋路。然後怪物的重新整理以及移動是由伺服器負責的,但是這樣會有一個問題,如果怪物在場景邊緣或者怪物與人之間有障礙物,伺服器是又不知道這裡有障礙物,那怪物的移動就沒法做了。
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn 轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
所以有這麼個需求,讓伺服器能夠判定當前移動位置是否在可行走區域之內。
所以就需要把客戶端的 NavMesh資料匯出給伺服器使用(或許有其它的辦法)。
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn 轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
Unity 提供了相關的介面:
NavMesh.CalculateTriangulation
利用這個介面能夠獲取到NavMesh 的資料,頂點以及頂點索引。
熟悉GL或DX的童鞋知道有了頂點以及頂點索引就可以畫出模型來。
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
下面是我寫的一個簡單的示例,用來把NavMesh 資料匯出到一個 obj 檔案,obj 是一種文字形式儲存的模型檔案格式。匯出之後直接拖到Unity 中可以看到NavMesh 的形狀。
/************************************************ * 檔名:ExportNavMesh.cs * 描述:匯出NavMesh資料給伺服器使用 * 建立人:陳鵬 * 建立日期:20160926 * http://blog.csdn.net/huutu/article/details/52672505 * ************************************************/using UnityEngine;using System.Collections;using UnityEditor;using System.IO;using UnityEngine.SceneManagement;public class ExportNavMesh{ [MenuItem("NavMesh/Export")] static void Export() { Debug.Log("ExportNavMesh"); NavMeshTriangulation tmpNavMeshTriangulation = NavMesh.CalculateTriangulation(); //新建檔案 string tmpPath = Application.dataPath + "/" + SceneManager.GetActiveScene().name + ".obj"; StreamWriter tmpStreamWriter = new StreamWriter(tmpPath); //頂點 for (int i=0;i<tmpNavMeshTriangulation.vertices.Length;i++) { tmpStreamWriter.WriteLine("v "+ tmpNavMeshTriangulation.vertices[i].x+" "+ tmpNavMeshTriangulation.vertices[i].y+" "+ tmpNavMeshTriangulation.vertices[i].z); } tmpStreamWriter.WriteLine("g pPlane1"); //索引 for (int i = 0; i < tmpNavMeshTriangulation.indices.Length;) { tmpStreamWriter.WriteLine("f " + (tmpNavMeshTriangulation.indices[i]+1) + " " + (tmpNavMeshTriangulation.indices[i+1]+1) + " " + (tmpNavMeshTriangulation.indices[i+2]+1)); i = i + 3; } tmpStreamWriter.Flush(); tmpStreamWriter.Close(); Debug.Log("ExportNavMesh Success"); }}
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
點選Export 匯出後,會生成以 當前 Scene 命名的 obj 檔案
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
拖到Unity 中繪製出來如下,證明我們成功匯出了NavMesh的資料
轉自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
把這個 obj 扔給伺服器,伺服器進行怪物是否在三角形 範圍內判定。具體怎麼做我不管了。
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow