让Unity NavMesh为我所用
Unity里面整合了一个NavMesh功能,虽然让人又爱又恨。
但当你在其他地方需要这个NavMesh的数据时,就更让人欲罢不能了。
比如说服务器需要Unity的NavMesh数据时。
比如说你想将Unity的场景导出到其他引擎时,比如时下流行的H5。
最近我就碰到了这样一个需求,走了一些弯路,研究了Unity的NavMesh
将Unity的NavMesh数据导出
先说代码,我编写了一个导出脚本,将navmesh数据可以导出成一个obj,也可以导出成一个json文件
你可以用svn 获取代码
http://code.taobao.org/svn/falconconv/trunk/babylonfan/webgl/res_navmeshexport

原理是Unity提供了一个接口可以得到NavMesh的三角形数据


这里直接有vertices 顶点,和 indices顶点索引
但是这个数据不可直接导出,这个数据不可直接导出这个数据不可直接导出。
导出来的三角形基本上都是不共边的,不共边怎么做连通图呢,这不行,所以要先分析他。
我已经帮你分析过了,这里unity发明了一个方法表达多边形,我没有搜到类似这样的做法,姑且认为是Unity发明的方法
Unity的NavMeshData有一些共边的三角形,共边的三角形其实不是连通关系,共边的三角形只是他们共同构成一个凸多边形,并且这种共边的三角形,全部都是扇形排列。
首先先以此划分,生成多边形列表。这个多边形列表,当然没有共边。
Unity的NavMeshData 那些不共边的多边形只是index索引不共边,从坐标上还是有共边的,所以我们合并掉重合顶点,重新排列多边形的index索引,就可以恢复到有共边的多边形列表和顶点列表
做了如上两步以后,我们就得到了原始的navmesh数据,有共边的多边形列表和顶点列表
然后将它写入obj文件或者json文件就可以了。
具体Unity的花招就是上面两步,代码可以拉svn研究。
二、外部使用这些数据
然后我们就可以脱离Unity来实现一个NavMesh了,到这里其实如果你接触过寻路,已经不用看了,如果你懒,接着往下看
我先在winform环境用c#实现了一个navmesh
你可以用svn拉取测试程序源码
http://code.taobao.org/svn/falconconv/trunk/babylonfan/webgl/navmesh_pathfinding_test

用导出的json文件画出了连通图,鼠标左右键,完成寻路。
Navmesh的寻路原理是两步
- 先用astar 算法从navmesh连通图找出经过的三角形,图中的灰色部分
- 用照射法在经过的三角形中找出一条路径
然后将c#代码移植为TypeScript代码,就将navmesh带到h5了
一样可以从svn拉取代码:
http://code.taobao.org/svn/falconconv/trunk/babylonfan/webgl/canvas/canvasWebgl_NavMesh

让Unity NavMesh为我所用的更多相关文章
- Unity NavMesh 格式 解析 分析 对比 Recast Navigation
工具软件 Excel Nodepad++ Sublime Unity 5.4 / 5.6 VS RecastDemo CodeBlocks 分析过程以Unity项目-Demo13为例 一. 创建测试模 ...
- 关于 Unity NavMesh 数据的访问
目前的工作需要加入自动寻路,后来决定使用 unity 自带的 NavMesh,但有个问题是这个寻路数据,服务器也是需要的,那么我就要把这个数据导出为服务器所用才行. 但 NaveMesh 暂 ...
- 关于 Unity NavMesh 数据的导出和使用
上周的工作重点转移到服务器寻路上来,刚刚做完没几天,总结一下,当时团队讨论的结果是使用 Unity 原生的 NavMesh 系统,然后将数据导出到服务器使用.我最初的思路是将导出的网格加载到服务器后, ...
- Unity NavMesh导航网格 初级教程
目的:要实现的功能就是你点击一下地图上的某个地方,人物就向着那个点移动.有点自动寻路的味道. 例子:三国群英传,三国赵云传之类的游戏里面的人物移动就可以用这个实现.还有一个我不太喜欢玩的游戏英雄联盟 ...
- 如何制作RTS游戏的寻路系统?
Q1:我们在做一个RTS游戏,开始用的是Unity自带的NavMesh的寻路,但发现这个并不适合RTS多人寻路,因为总会出现阻挡和闪跳的问题.看Asset Store上的A* path插件评论说在碰撞 ...
- CritterAI 翻译 Configuration Parameters
翻译自: http://www.critterai.org/projects/nmgen_study/config.html 参考: http://blog.csdn.net/kun1234567/a ...
- Unity自动寻路Navmesh之高级
隔离层自动生成寻路网格 (源码scene1.unity) 1.创建Plane实例P1,P2,两者之间出现一条鸿沟.直接控制角色位移是无法通过的. 2.打开Navigation窗口,分别选中P1,P2, ...
- unity自带寻路Navmesh入门教程(三)
继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下两个例子,先看看完成的效果: 第一个例子对于喜欢DOTA的朋友应该很熟悉了,就是不同小队分不同路线进攻的寻路,红绿蓝三个队伍分别根据三条路 ...
- unity自带寻路Navmesh入门教程(二)
上一节简单介绍了NavMesh寻路的基本用法,这次来介绍一下稍微复杂一点点的高低落差以及跳跃的做法,首先来看看这次的目标: 由于博客相册上传GIF有限制,所以我把整个过程切开了2部分上传,第一部分 ...
随机推荐
- .NET Core全新路线图
.NET Core / ASP.NET Core 1 RTM发布两周后,社区也很积极,收到了非常多的反馈,上周五微软的scott Hunter 在dotnet团队官方博客上发布了.NET Core全新 ...
- 【前端性能】高性能滚动 scroll 及页面渲染优化
最近在研究页面渲染及web动画的性能问题,以及拜读<CSS SECRET>(CSS揭秘)这本大作. 本文主要想谈谈页面优化之滚动优化. 主要内容包括了为何需要优化滚动事件,滚动与页面渲染的 ...
- CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]
上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...
- .NET Core的日志[4]:将日志写入EventLog
面向Windows的编程人员应该不会对Event Log感到陌生,以至于很多人提到日志,首先想到的就是EventLog.EventLog不仅仅记录了Windows系统自身针对各种事件的日志,我们的应用 ...
- JDBC增加删除修改
一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...
- Xcode 锁终端
锁终端 输入: <1>cd /Applications/Xcode.app 回车 结果显示: Xcode.app 输入: <2>sudo chown -hR root:whee ...
- Android种使用Notification实现通知管理以及自定义通知栏(Notification示例四)
示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我 ...
- SVN的使用
- 解决mysql插入数据时出现Incorrect string value: '\xF0\x9F...' for column 'name' at row 1的异常
这个问题,原因是UTF-8编码有可能是两个.三个.四个字节.Emoji表情或者某些特殊字符是4个字节,而MySQL的utf8编码最多3个字节,所以数据插不进去. 我的解决方案是这样的 1.在mysql ...
- Linux基础介绍【第五篇】
linux权限位 Linux文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件属主权限.属组权限.其他用户权限. r:read可读权限,对应数字4: w:write可写权限,对应数字 ...