http://www.unity蛮牛.com/thread-33383-1-1.html.

许久未曾发帖了,最近忙于换工作的问题,经常处于纠结状态,so...
偶尔上蛮牛还能看到大家对我的支持,感觉还是蛮欣慰的,在此谢谢大家支持...
好了,闲话就不先多讲了,直接进入今天的主题吧.

使用过unity3d自带的寻路网格组件(Navigation)的朋友应该知道,用它来做AI的寻路还是非常的方便的,如:

[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
public Transform _obj;
   private NavMeshAgent _nav;
   void Awake()
   {
       _nav = this.GetComponent<NavMeshAgent>();
   }
   void Update()
   {
       if (Input.GetMouseButtonDown(0))
       {
               _nav.SetDestination(_obj.position);
       }
    }

只需要简单几行代码,即可实现自动避让 并以最短距离来追寻所要寻找的目标(当然首先要在Navigation中Bake地形,由于本帖不是教如何使用Navigation,在此就不过多叙述,不太明白的童鞋,可以百度Navigation,网上有很多相关帖子).
可是,在我们在写AI时,有需求一堆(怪/兵)攻击(主角/怪),如果用Navigation做导航,
经常遇到被(怪/兵)挡住,不会绕过前面的(怪/兵).如:
<ignore_js_op> 
这是多么尴尬的局面啊,那又当如何解决呢?
后来在圣典中文发现了这样一个东西NavMeshObstacle
<ignore_js_op>

上面有一个关键字大家需要注意下“具有动态阻挡物”,
咦?居然可以动态作为一个阻挡物?那么我们是否可以在找到目标的时候,让前面先到的 怪或兵 变成一个阻挡物?
那么如果可以的话,后面跟上来的 怪或兵又是否会自动判断到前面有阻挡物是否就会自动避让 重新寻找新的位置?达到我们想要的效果呢?
那就试试吧
<ignore_js_op>

先加上一个NavMeshObstacle组件 
<ignore_js_op>

额...怎么好像跟圣典上的属性对不上,好像多了几个属性(我目前版本是4.5.5f1好像Unity4.3.4上的都是这种的) ,先不管 运行看看效果
<ignore_js_op> 
我去,这什么情况 ?一运行发现被我加了NavMeshObstacle的物体 怎么像抽风了一样?难道行不通?
还是跟多了那几个属性有关?先去官网看看
<ignore_js_op> 
地址:http://docs.unity3d.com/ScriptReference/30_search.html?q=NavMeshObstacle
大概意思是:
Radius:半径
Height:高度
Move Threshold:当模式为Carve时,此物体的移动距离超过这个阀值后,更新当前的导航网格(重新挖洞)。
Carve:是否打开在导航网格挖洞的模式
Carve模式的一些总结:
1.在Bake场景的时候,Navigation窗口的Bake页面有一个高度值,场景中的导航网格通常作为一个平面,当NavMeshObstacle 距离小于这个高度时,
才会在导航网格上挖洞,否则NavMeshObstacle 还是以普通模式存在的。
2.NavMeshObstacle 在刚创建的时候最好先关闭NavMeshObstacle 这个组件,但需要是再打开,在跟NavMeshAgent混用时,不能共用(同时激活状态),
只能选其一,不然有bug。
3.碰撞还是使用trigger
4.最好不要同时使用RigidBody,有bug,新版本可能改好了,参考链接。
5.在挖洞时,设备掉帧比较明显。善用Move Threshold。

原来是我跟NavMeshAgent共用的问题,我去...
那就简单修改下吧(后面会放源码,这里就先简单说下思路
1.给要寻路的对象加上NavMeshAgent和 NavMeshObstacle组件,NavMeshObstacle去掉勾选,处于不激活状态
2.代码逻辑判断,当对象到达目标位置时 就先设置NavMeshAgent不启用,NavMeshObstacle为启用,
这样后面跟上来的 怪或兵就会自动判断到前面有阻挡物 自动避让 重新寻找新的位置
3.当 重新选择目标时,逻辑代码编写NavMeshObstacle先不启用,然后设置NavMeshAgent启用,设置新的目的地就可以了
运行效果如下:
<ignore_js_op> 
结果还是不错的,这样就会自动找到最合适的位置 不会存在开始的推挤情况了
可能图太小 ,来个大的静态图
<ignore_js_op> 
好了 ,就先这样吧 ,大家可能觉得后面有些草率了,因为实在太困了 现在2014年11月27日00:00:22  忘谅解 !!!
如有不太明白的地方 可以给我留言  晚安咯
项目工程 我放百度了 地址:http://pan.baidu.com/s/1pJNWGVD

通过NavMeshObstacle解决NavMesh防卡的更多相关文章

  1. 解决Android模拟器卡慢的问题

    解决Android模拟器卡慢的问题 本文介绍使用Intel HAXM技术为Android模拟器加速,使模拟器运行速度媲美真机. Intel HAXM(Hardware Accelerate Execu ...

  2. 解决XMind运行卡顿

    问题 XMind是一款很好用的脑图工具,它是基于eclipse开发的,而且基础功能是免费的.最近我安装了XMind 8 Pro,但是发现在Mac上运行有卡顿. 解决方式 解决这个问题的思路也很简单,软 ...

  3. 【C++】解决vs2015经常卡顿的办法

    VS2015经常性的卡顿,参考了zhihu里问答的办法,编译和使用的时候的确快多了 为什么vs2015经常卡顿? https://www.zhihu.com/question/34911426 感谢z ...

  4. 彻底解决 Intellij IDEA 卡顿 优化笔记,重要的快捷键

    由于工作中经常出现分支各种切换,使用Eclipse便不再像以前那么舒服了,不停的修改工作空间,每次修改完工作空间又是一堆一堆的个性化设置,来回的切换,真的很累.我们做软件的,怎么能不去尝试新鲜的呢,毕 ...

  5. 彻底解决 intellij IDEA 卡顿 优化笔记

    由于工作中经常出现分支各种切换,使用Eclipse便不再像以前那么舒服了,不停的修改工作空间,每次修改完工作空间又是一堆一堆的个性化设置,来回的切换,真的很累.我们做软件的,怎么能不去尝试新鲜的呢,毕 ...

  6. Latex 3: 解决LaTeX编译卡顿问题

    1.问题: 最近在编译latex时,老是在tulmr.fd处编译很久,但是以前不这样啊,那肯定就是我最近做了什么导致这样的了,是什么呢? 2.解决: 后来google下发现了解决办法,原来是我新安装了 ...

  7. android问题及其解决-优化listView卡顿和怎样禁用ListView的fling

    问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/4 ...

  8. 解决eclipse 保存卡顿的问题

    开发十年,就只剩下这套Java开发体系了 >>>   eclipse 如果启动慢,还可以接收. 可是如果是 保存的时候卡顿, 有时候会 卡顿 3秒-5 秒的,感觉到写代码特别的不顺畅 ...

  9. 解决vscode电脑卡顿问题

    在安装了vscode之后,发现电脑很卡,cpu使用率高达100%. 解决方法1: 打开vscode之后,点击文件==>首选项==>设置搜索设置search.followSymlinks然后 ...

随机推荐

  1. SaltStack与ZeroMQ(二)

    SaltStack与ZeroMQ SaltStack底层是基于ZeroMQ进行高效的网络通信. ZeroMQ简介 ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设 ...

  2. web项目中的跨域问题解决方法

    一种是JSONP 一种是 CORS. 在客户端Javascript调用服务端接口的时候,如果需要支持跨域的话,需要服务端支持. JSONP的方式就是服务端对返回的值进行回调函数包装,他的优点是支持众多 ...

  3. Objective-C复合

    正所谓复合,便是定义的这个类中的成员是另外类的实例方法. 也就是把其他对象作为自身的题部分,以提升自身的功能, 就相当于C语言中的函数嵌套.下面是一段代码(多个文件放在一块了): /***Comput ...

  4. Arcgis 几何网络分析

    ArcGIS:网络分析(转)   由于之前对网络分析的理解有很多问题,所以在网上找了一些资料,这是其中一篇我觉得比较好的,所以就整理了一下,发到网上来,留个底吧,呵呵 注:关于几何网络的建立见前面的& ...

  5. bootstrap从phpcmsv9中数据库中取出照片达到自适应的效果

    <script type="text/javascript"> $(".col-xs-12 img").addClass("carouse ...

  6. Linux查看CPU和内存使用情况

    在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...

  7. 如何修改Linux主机名

    Linux 下什么都比较麻烦,就连修改主机名也不例外.我们就下文说一下具体方法. Linux 安装好后,其默认的主机名是 localhost.修改 Linux 主机名需要3步. 使用 hostname ...

  8. JavaWeb学习笔记——Ajax

  9. Java数据结构——二叉树

    前序遍历——根 左 右 中序遍历——左 根 右 后序遍历——左 右 根 //================================================= // File Name ...

  10. c++vector(入门级)

    #include<iostream> #include<fstream>> #include<vector> using namespace std; voi ...