继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下两个例子,先看看完成的效果:

 

第一个例子对于喜欢DOTA的朋友应该很熟悉了,就是不同小队分不同路线进攻的寻路,红绿蓝三个队伍分别根据三条路线进攻。

第二个例子是动态的控制道路的开关。当吊桥打开时,道路不通,当吊桥放下时,道路可以通行。

先来说说第一个例子吧,第一个例子其实很简单,只需要在之前两节的基础上修改一下层的设置就可以了。

先来分析一下我们的地形,为了做这个例子,我准备了两个plane分别作为我方基地和地方基地,然后用plane简单的拼了三条线路。

在我方基地,准备了红绿蓝各三个的小兵(用胶囊代替)。当然小兵身上带着NavMesh Agent组件

如果把两个plane和三条线路都打上Navigation static的话,就和普通的寻路没有区别,三条路都能走。接下来我们进行层的设置。

还记得第一节里面讲过的怎么设置NavMeshLayer吧?

现在我们需要设置Red、Blue和Green三个层,如上图所示。

现在,我们可以选择路线一,然后在Navigation Layer里面选择Red层了。相应的,路线二选择Blue层,路线三选择Green层

Bake出来后,会是上面的效果。

道路已经设置好了接下来我们对小兵身上的NavMesh Agent组件进行设置

选择蓝色的小兵,然后找到NavMesh Agent组件里面的NavMesh Walkable选项,这里就是人物能通过的层的选择了。按照刚才层的设计,蓝色的小兵需要勾选Blue层 ,把Red层和Green层取消选择。

同理,把红色小兵和绿色小兵的NavMesh Walkable层处理一下。

现在,我们可以运行了,移动目标点到敌方基地,三种不同颜色的小兵就会根据不同的路线寻路进攻了。

我们第一个目标也就完成了。
 
 
接下来说一下第二个例子
这个例子我准备了两个平台,中间是一个活动的吊桥,一个带NavMesh Agent组件的角色模型,一个目标点
如果按照之前的操作,我们可以轻易的让角色在任意位置寻路,但为了让吊桥升起的时候角色不能通过吊桥,我们需要对吊桥的NavMesh层进行一些设置。
和刚才一样,我们要预先设置了一个叫做bridge的层(在第一节的时候做过)。
 
同样的,吊桥选择bridge层
 
这里的操作和上面的例子没什么区别,但这次角色身上的NavMesh Walkable不需要设置,直接Everything就行了。
 
      到了这里,我们需要通过脚本来控制人物是否能通过吊桥。这里需要用NavMeshAgent.walkableMask来动态修改NavMesh Walkable的值。
      关于吊桥怎样升降,这不是本次讨论的内容,你可以选择直接用位移来控制,或者吊桥直接做好开关的动画也行。
      之前说过,各位最好要有习惯用状态来控制物体。这里的吊桥会有2种状态,一种是开状态,一种是关状态。当开状态时,吊桥断开,人物不能通行,关状态时,吊桥闭合,人能通行。给予这两种状态,我们给人物身上的NavMeshAgent.walkableMask赋值。
写一段很简单的代码吧:
    private bool open = false;
    private NavMeshAgent agent;
void Start () {
  agent = gameObject.GetComponent<NavMeshAgent>();
 
 }
void Update(){
if(open) agent.walkableMask = 1;
else agent.walkableMask = -1;
}
 
可以了,就是这么简单。
这里为了简便,把赋值写在了UpDate里面,其实这样做是不正确的,没必要每帧都检测赋值,只需要把这个赋值写在吊桥开关的控制里面就行了。
我来解释一下其中的意思:
定义了一个状态的开关open,当吊桥打开时open= true;当吊桥闭合时,open = false;至于这个状态时怎样赋值的,各位可以自己试试想办法。
然后假设这个脚本是放置角色身上的,那么在start的时候就获取角色身上的NavMesh Agent组件。当然了,你也可以把脚本放在其他的地方,然后通过赋值来指定agent。
当open为true的时候,人物的walkableMask = 1,意思是只有第一层(就是默认的Default)可以让玩家通行。
当open为false的时候,人物的walkableMask = -1,意思是所有层(Everything)都可以让玩家通过。
从自定义层的界面我们可以总结一下,每一个层的可通过值,其实就是全面所以层的值相加的总和再加1。或者说是2的(n-1)次方。
除了指定本身的层意外,还可以指定多个层,比如这里假如你想mix一个Default和bridge层都能通过,你可以设定walkableMask = 9,也就是1+8。
 
 
      到此为止,阿赵我对于Unity自带的NavMesh寻路的介绍就结束了。至于NavMesh或者NavMesh Agent组件的各个属性和方法,API文档里面有具体的说明,有兴趣可以具体去看看,我就不一一解释。有很多变化的用法,各位可以自己尝试一下。谢谢大家的支持!

转自:http://liweizhaolili.blog.163.com/blog/static/16230744201271225812998/

unity自带寻路Navmesh入门教程(三)的更多相关文章

  1. 【转】unity自带寻路Navmesh入门教程(三)

    http://liweizhaolili.blog.163.com/blog/static/16230744201271225812998/ 继续介绍NavMesh寻路的功能,接下来阿赵打算讲一下以下 ...

  2. unity自带寻路Navmesh入门教程(一)

    说明:从今天开始,我阿赵打算写一些简单的教程,方便自己日后回顾,或者方便刚入门的朋友学习.水平有限请勿见怪.不过请尊重码字截图录屏的劳动,如需转载请先告诉我.谢谢! unity自从3.5版本之后,增加 ...

  3. 【转】unity自带寻路Navmesh入门教程(一)

    http://liweizhaolili.blog.163.com/blog/static/16230744201271161310135/ 说明:从今天开始,我阿赵打算写一些简单的教程,方便自己日后 ...

  4. unity自带寻路Navmesh入门教程(二)

    上一节简单介绍了NavMesh寻路的基本用法,这次来介绍一下稍微复杂一点点的高低落差以及跳跃的做法,首先来看看这次的目标:   由于博客相册上传GIF有限制,所以我把整个过程切开了2部分上传,第一部分 ...

  5. 【转】unity自带寻路Navmesh入门教程(二)

    http://liweizhaolili.blog.163.com/blog/static/16230744201271210237616/ 上一节简单介绍了NavMesh寻路的基本用法,这次来介绍一 ...

  6. unity自带寻路Navmesh入门教程

    http://liweizhaolili.blog.163.com/blog/static/16230744201271161310135/ http://liweizhaolili.blog.163 ...

  7. unity3D ——自带寻路Navmesh入门教程(一)(转)

    转自:http://liweizhaolili.blog.163.com/blog/static/16230744201271161310135/ 说明:从今天开始,我阿赵打算写一些简单的教程,方便自 ...

  8. unity3D——自带寻路Navmesh入门教程(二)(转)

    转自:http://liweizhaolili.blog.163.com/blog/static/16230744201271210237616/ 上一节简单介绍了NavMesh寻路的基本用法,这次来 ...

  9. Unity自带寻路Navmesh

    自带寻路Navmesh的三大组件: 1.Nav Mesh Agent:主要挂在寻路物体上 2.Off Mesh Link:实现区域转移功能(例如,有时不一定只是在地面上进行寻路,可能有些高高的平台,平 ...

随机推荐

  1. WebAPI使用多个xml文件生成帮助文档

    一.前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet.WebApi.HelpPage)可以根据注释生成帮助文档,查看代码实现会发现是基于解析项目生成的xm ...

  2. Coursera台大机器学习课程笔记4 -- Training versus Testing

     这节的主题感觉和training,testing关系不是很大,其根本线索在于铺垫并求解一个问题:    为什么算法PLA可以正确的work?因为前面的知识告诉我们,只有当假设的个数有限的时候,我们才 ...

  3. 夺命雷公狗-----React---24--小案例之react经典案例todos(单条任务的删除)

    我们的组建分析图 我们组建需要的是删除,数据流方式如下所示: 为了更方便下一步操作,先写个函数他 然后在Ul组建里面对她进行处理 然后在Zong组建里对数据进行处理,如下所示: 但是悲剧的一幕出现了, ...

  4. Immutable笔记

    Immutable笔记 转换成js数据 获取或则改变嵌套式imutable数据类型  

  5. 关于Union 中 ORA-12704:字符集不匹配问题的解决

    在使用Union all连接时,若A集合中某列为nvarchar2或nvarchar类型,而B集合中无此列,用‘ ’ 来代替是会报字符集不匹配,解决方法有两种,见下面的示例 有问题的SQL: sele ...

  6. maven nexus 私服的搭建学习

    之前对maven有过初步的了解与认识,自己也创建过项目使用其来管理,但都是非常粗浅的操作,今天在高人的指点下,也学着在自己的电脑上搭建一个maven私服,虽然技术难度也不高,但为了更深层次的提高,这些 ...

  7. 妈妈再也不担心我的编码问题了。中文编码融汇贯通,windows,django,python,java,html 【转】

    http://blog.csdn.net/farmer_cc/article/details/41830999 HTML编码:html文件是utf-8编码的,不确定的话用记事本打开,另存为的时候就能够 ...

  8. 敏捷开发之Scrum扫盲篇

    现在敏捷开发是越来越火了,人人都在谈敏捷,人人都在学习Scrum和XP... 为了不落后他人,于是我也开始学习Scrum,今天主要是对我最近阅读的相关资料,根据自己的理解,用自己的话来讲述Scrum中 ...

  9. Card Flip

    卡牌效果:O(∩_∩)O,只做了webkit浏览器的效果,请用chrome~ 1.首先呢,先用一个框框把卡牌包住,然后呢,搞两个子元素作为卡牌正反面.当然咯,反面是看不见滴~ <section ...

  10. Linux部署Apache ActiveMQ 5.14.1

    简单记一下,下载地址 http://activemq.apache.org/download.html 一.安装JDK7以上,官方说明:http://activemq.apache.org/versi ...