博客专家

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

发表于2016/9/26 18:15:11  1089人阅读

分类: Unity MMO

这个项目的客户端使用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 扔给服务器,服务器进行怪物是否在三角形 范围内判定。具体怎么做我不管了。

Unity 导出NavMesh (可行走区域判定) 数据给服务器使用的更多相关文章

  1. unity A*寻路 (一)导出NavMesh数据

    使用unity的API   NavMesh.CalculateTriangulation 可以获取NavMesh数据 首先 我们创建一个新的工程 保存一个test场景 然后在场景中添加一个Plane作 ...

  2. Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域

    上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...

  3. EXP/IMP 导出生产库表的指定数据到测试库一例

    一般来讲,EXP/IMP是上一代导出导入程序,EXPDP/IMPDP是新一代的导出导入程序.对于大数据量的导出导入首选EXPDP/IMPDP,可以用到并行度,对表空间等操作上也更加的灵活.对于小数据量 ...

  4. Unity3D 解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题

    解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题 <meta-data android:name="unityplayer.SkipPermissi ...

  5. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

  6. Unity导出xcode后自动化导入第三方SDK

    最近因为在给项目接入第三方SDK,遇到了一个比较烦人的事情就是,每次出包都要重新根据第三方SDK说明设置xcode,每次最少花20分钟来设置,如果出错的话就不一定是20分钟的事了,所以我决定要做一个自 ...

  7. 【ASH】如何导出视图DBA_HIST_ACTIVE_SESS_HISTORY的查询结果数据

    [ASH]如何导出视图DBA_HIST_ACTIVE_SESS_HISTORY的查询结果数据 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后 ...

  8. 整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK

    Unity导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础. win7 下配置java环境变量,下面是链接 http://www.cnbl ...

  9. 用NPOI实现导入导出csv、xls、xlsx数据功能

    用NPOI实现导入导出csv.xls.xlsx数据功能   直接上代码 首先定义一个接口   如果需要直接操作文件的话,就自己在封装一次 然后定义csv类的具体实现 这个需要引入命名空间LumenWo ...

随机推荐

  1. How to install torcs package in Debian

    Installation instructions Installing torcs package in Debian Wheezy is as easy as running: 没想到在debia ...

  2. cocos2d-js 3.0 ios平台编译打包

    原帖在http://www.cocoachina.com/bbs/read.php?tid=209356 整理到github的https://github.com/faint2death/cocos2 ...

  3. Java基础--NIO

    NIO库在JDK1.4中引入,它以标准Java代码提供了高速的,面向块的IO,弥补了之前同步IO的不足. 缓冲区Buffer Buffers是一个对象,包含了一些要写入或读出的数据.在面向流的IO模型 ...

  4. Android内存泄露总结

    内存泄露是如何产生的? 当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏. ...

  5. Java 成员变量和局部变量

    1.成员变量 在类中定义,用来描述对象将要有什么. 2.局部变量 在类的方法中定义,在方法中临时保存数据. 成员变量和局部变量的区别 作用域不同: 局部变量的作用域仅限于定义它的方法 成员变量的作用域 ...

  6. solr 的使用及安装【转】

    注本文以solr3.3为例 Solr 简介 Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现.       Solr 主要特性有:强大的全文检索功能,高亮显示检索结果, ...

  7. 7503E-M-irf2配置以及bfd配置

    IRF2配置 irf domain 10 irf mac-address persistent always irf auto-update enable irf auto-merge enable ...

  8. node的socket.io的之事件篇

    socket.io类库不但可以相互发送消息,而且还可以通过socket端口对象的emit方法互相发送事件. emit在之前的事件上说过现在一句话带过:emit是用来手动触发事件的. socket.em ...

  9. 安装OpenResty

    ./configure --prefix=/data/openresty_10002 --with-luajit --with-http_stub_status_module OpenResty,也被 ...

  10. springMVC 踩过的坑 - 记录

    1. 后台持久层Spring Jpa(即hibernate), 前台angularJS(angularJS只接受json串), 在后台使用DTO层对象代替domain(entity)与前台交互时, 传 ...