Unity 导出NavMesh 可行走区域判定 数据给服务器使用

               

这个项目的客户端使用Unity 自带的 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  转自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

所以有这么个需求,让服务器能够判定当前移动位置是否在可行走区域之内。

所以就需要把客户端的 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

猜你喜欢

转载自blog.csdn.net/qq_43667944/article/details/86354681