demo视频
上次发上来的NavMesh动态生成技术,有网友问我效率的问题,上次的演示只是简单的测试实现的情况,然后简单的测试了在少数障碍物的情况下的时间是0毫秒。这次修改了一下,模型的范围不再是矩形,而是有了一个边角范围。这样的计算比上次的稍微复杂了一点。然后我这次放比较多的障碍物,来测试效率的问题。
看看上面的视频可以知道。在物体不多的情况下,基本上是感觉不出来生成网格的时间的。不过物体到达了一定数量之后,还是会有一定的等待时间的,比如上面的例子再最多障碍物的情况下,大概是半秒左右。
这个网格生成的过程,其实是计算了很多东西的,物体多了之后肯定是会占用一定的时间的。我们可以这样看待它的使用价值:
1、我们不需要漫长的bake等待,只需要短短的几毫秒到几秒钟时间,就能生成好需要的网格。当然了,我这个计算的东西会比官方自带的NavMesh要少很多,不过我觉得针对一般的手机游戏或者网页游戏,应该是够用的。那么,我们不需要bake就能用,而这个短短的几毫米到几秒钟,我们可以放在场景初始化的时候做,玩家基本不会有感觉。
2、可以动态障碍物。在实际的应用中,动态障碍物不会经常的出现,而只是会出现在某些情况。比如一条路突然被石头砸中挡住了,或者某些树木被铲平了变成可以走了,再或者复杂点的,下起流星雨,某个区域渐渐越来越多障碍物了。这些情况,我们可以提早的知道出现的区域,然后单独的生成一个网格作为动态改变网格的区域。在这样的情况下,动态障碍物生成网格的时间久不会很多了。
3、寻路的信息可以按照自己的需要才生成,或者传输。我们可以在各种平台动态下载我们需要的寻路信息,或者直接到用的时候才生成。这样,我们可以在服务器用、可以在网页游戏用,可以在手机平台用。
官方提供的NavMesh比我这个自己写的功能强大很多,不过由于需要烘焙,使用的限制会比较大一点。最新的4.3版本的Unity3D,看官方的升级文档,好像已经有了动态障碍物的功能,但我试了一下,没有发现。如果这个功能可以由官方提供,那肯定是更好了。
然后这个功能我也很顺便的移植到了flash上面去,同样的顺利运行了。不过flash的效率比unity3d真的差很多很多,同样的代码,同样的算法,但在flash生成动态网格的时候,只有少数几个障碍物的情况也会明显的感觉到生成的时间。而unity在这方面就好很多了。
不过做flash是有很多郁闷的事情的,很多很基础的东西,都是要自己写,所以用unity3d的人是很幸福的,什么工具和常用功能都已经提供了,直接用就可以了。