Unity 导出NavMesh (可行走区域判定) 数据给服务器使用
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 (可行走区域判定) 数据给服务器使用的更多相关文章
- unity A*寻路 (一)导出NavMesh数据
使用unity的API NavMesh.CalculateTriangulation 可以获取NavMesh数据 首先 我们创建一个新的工程 保存一个test场景 然后在场景中添加一个Plane作 ...
- Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域
上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...
- EXP/IMP 导出生产库表的指定数据到测试库一例
一般来讲,EXP/IMP是上一代导出导入程序,EXPDP/IMPDP是新一代的导出导入程序.对于大数据量的导出导入首选EXPDP/IMPDP,可以用到并行度,对表空间等操作上也更加的灵活.对于小数据量 ...
- Unity3D 解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题
解决用Unity导出的Android工程在6.0及以上设备会弹出一串权限对话框的问题 <meta-data android:name="unityplayer.SkipPermissi ...
- unity导出工程导入到iOS原生工程中详细步骤
一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...
- Unity导出xcode后自动化导入第三方SDK
最近因为在给项目接入第三方SDK,遇到了一个比较烦人的事情就是,每次出包都要重新根据第三方SDK说明设置xcode,每次最少花20分钟来设置,如果出错的话就不一定是20分钟的事了,所以我决定要做一个自 ...
- 【ASH】如何导出视图DBA_HIST_ACTIVE_SESS_HISTORY的查询结果数据
[ASH]如何导出视图DBA_HIST_ACTIVE_SESS_HISTORY的查询结果数据 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后 ...
- 整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK
Unity导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础. win7 下配置java环境变量,下面是链接 http://www.cnbl ...
- 用NPOI实现导入导出csv、xls、xlsx数据功能
用NPOI实现导入导出csv.xls.xlsx数据功能 直接上代码 首先定义一个接口 如果需要直接操作文件的话,就自己在封装一次 然后定义csv类的具体实现 这个需要引入命名空间LumenWo ...
随机推荐
- WINDOWS下kill进程的命令
相信大家都有用命令行(CMD)解决问题的习惯,起码我感觉自己在处理Windows系统故障时越来越离不开Windows PE了,今天我想介绍两个很实用的命令:Tasklist与Tskill.命令:Tas ...
- 在ng中的select的使用方法的讲解
项目中我们可能会使用到条件过滤选择框之类的东西,最简单的就是input.select. 关于select的使用我们通常会需要从数据库中返回数据进行动态绑定. 此时我们会有两种方式: 1)使用ng-re ...
- RK3288 USB触摸屏无法使用,需要添加PID和VID
RK3288 Android5.1 现象:USB 接口触摸屏插到板子上,触摸屏无法使用,有可能出现更奇葩的,同一套代码,有的板子可以用,有的板子不能用. 1.打开串口调试,插上触摸屏,读取触摸屏的 ...
- waitpid()设置WNOHANG位(非阻塞模式)判断子进程的状态是否有所改变
参考<Linux/Unix系统编程手册>26.1.5,对于系统调用waitid() #include <sys/wait.h> int waitid(idtype_t idty ...
- 导航条且手机版.html——仿照官网例子
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- golang的吐槽
烂到极致的包管理:简单清晰的包管理机制是任何一门语言都需要具备的.后起之秀的golang,在众多成熟的其他语言包管理方式,居然做成这样,简直人间地狱.
- 示例文件下载demo
页面: 后台: package com.js.ai.modules.shwindow.util; import java.io.BufferedInputStream; import java.io. ...
- [POJ] Palindrome
Palindrome Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 62102 Accepted: 21643 Desc ...
- [Cpp primer] Namespace using Declarations
If we want to use cin in the standard library, we need to std::cin To simplify this work, we can do ...
- python collections module's defaultdict
Collections is a high-performance container datatypes. defaultdict objects class collections.default ...