Unity之自动寻路
2017-04-14 15:19
387 查看
小白欢迎评论,共同探讨,共同进步
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/262cc727c2a0cbc7ef96bd787bebbade.gif)
Unity之自动寻路,继续摘下之前的笔记。
(一)简单寻路
首先选择需要行走的路块进行烘焙,(点击最上方的Windows 下拉菜单的 Navigation )出现以下界面。
选中需要烘焙的路面以及物体,打上红勾,可以行走的区域选择Walkable,不可行走的选择Not Walkable。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/acade97512da22d7411ea1ead343dfaf)
选择完成后,点击右下角的Bake,即可烘焙完成。
烘焙完成也就完成了我们的第一步了。
在需要寻路的人物上,加上自动寻路Nav Mesh Agent组件,接下来再写个简单的小脚本,就可以让我们的人物动起来啦。
(二)使用Off Mesh Link 连接组件,做一个跳板,使NPC可以经过跳板AB,来到达目标点。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/738bd54c809367694fbbc1e83d333f5a)
下面就说一下方法吧,中途遇到个小Bug,搞了好几次终于搞定了。
步骤同(一)。不同的是我们需要在A或B上加一个Off Mesh Link 连接组件,然后将A、B起始点拖拽如组件中即可。然后我们再把需要走的地方烘焙一下,(A、B、地方、大方块)。
注:遇到的Bug:A、B方块不能太大!!!不然就导致我们的小人跳不上去啦。(这个Bug很诡异
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/angry.gif)
)
(三)选择路段行走
使A、B各沿着自己的路线行走。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/5c3fd5dcdbeae6ab954199777b0f3599)
其实也很简单,下面来解说一下。
还是在Navigation界面,选择Areas给红蓝两条路添加自定义标签,
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/82334e681462fafb71202936d0c3cee3)
然后返回Obj界面,选择红色道路对应标签(以红色为例)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/ab124b82f89a61503a19bb5cbeb4ffbf)
然后选择红色小人,更改组件中的Area Mask,可以走哪条线路,就勾那个。接下来烘焙一下,就可以运行来,会发现红色只走红色道路到达对面。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/d589ea93dcea7d5047342da9848b0f90)
(四)障碍物组件。
NavMeshObstacle 导航网格障碍
导航网格躲避的障碍。
下面圣典的解释,再添加一些自己的话,使其比较容易理解。
障碍仅影响代理的躲避行为而不是寻路。这意味着当测绘路径时代理将会忽略该障碍,但是沿着路径移动时代理将会在障碍的附近回避。
如果启用carving,因此测绘路径时将会避免该障碍。(可以理解为没有烘焙此障碍物,不能通过。【实际事实是烘焙过的】)这意味着如果说障碍阻塞缺口,寻路将会寻找一个替代路线给目标。(也就是绕行)。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/a89ae3f09c79068ccccfa89366ff6983)
没有启用carving,障碍将会在导航网格上创建一个临时的“门”(路径是已被烘焙过的,但门是关着的)。该缺口(门)将会被寻路认可,代理将会朝缺口前进但是不可能通过缺口直到该障碍被清除。
(设置enable = flase,即障碍物清除)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202010/10/baaad4cc37d98fc94b466c64eee12b6c)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201704/262cc727c2a0cbc7ef96bd787bebbade.gif)
Unity之自动寻路,继续摘下之前的笔记。
(一)简单寻路
首先选择需要行走的路块进行烘焙,(点击最上方的Windows 下拉菜单的 Navigation )出现以下界面。
选中需要烘焙的路面以及物体,打上红勾,可以行走的区域选择Walkable,不可行走的选择Not Walkable。
选择完成后,点击右下角的Bake,即可烘焙完成。
烘焙完成也就完成了我们的第一步了。
在需要寻路的人物上,加上自动寻路Nav Mesh Agent组件,接下来再写个简单的小脚本,就可以让我们的人物动起来啦。
public NavMeshAgent Nav_Npc; //NPC人物 public Transform Tra_Target; //目标点 private void Update() { //点击鼠标,使NPC到达鼠标点击位置 RaycastHit hit; if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { //SetDestination()函数:设置或者更新目的地并计算新的行走路径。 Nav_Npc.SetDestination(hit.point); } } }
(二)使用Off Mesh Link 连接组件,做一个跳板,使NPC可以经过跳板AB,来到达目标点。
下面就说一下方法吧,中途遇到个小Bug,搞了好几次终于搞定了。
步骤同(一)。不同的是我们需要在A或B上加一个Off Mesh Link 连接组件,然后将A、B起始点拖拽如组件中即可。然后我们再把需要走的地方烘焙一下,(A、B、地方、大方块)。
注:遇到的Bug:A、B方块不能太大!!!不然就导致我们的小人跳不上去啦。(这个Bug很诡异
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/angry.gif)
)
(三)选择路段行走
使A、B各沿着自己的路线行走。
其实也很简单,下面来解说一下。
还是在Navigation界面,选择Areas给红蓝两条路添加自定义标签,
然后返回Obj界面,选择红色道路对应标签(以红色为例)
然后选择红色小人,更改组件中的Area Mask,可以走哪条线路,就勾那个。接下来烘焙一下,就可以运行来,会发现红色只走红色道路到达对面。
(四)障碍物组件。
NavMeshObstacle 导航网格障碍
导航网格躲避的障碍。
下面圣典的解释,再添加一些自己的话,使其比较容易理解。
障碍仅影响代理的躲避行为而不是寻路。这意味着当测绘路径时代理将会忽略该障碍,但是沿着路径移动时代理将会在障碍的附近回避。
如果启用carving,因此测绘路径时将会避免该障碍。(可以理解为没有烘焙此障碍物,不能通过。【实际事实是烘焙过的】)这意味着如果说障碍阻塞缺口,寻路将会寻找一个替代路线给目标。(也就是绕行)。
没有启用carving,障碍将会在导航网格上创建一个临时的“门”(路径是已被烘焙过的,但门是关着的)。该缺口(门)将会被寻路认可,代理将会朝缺口前进但是不可能通过缺口直到该障碍被清除。
(设置enable = flase,即障碍物清除)
相关文章推荐
- [Unity游戏开发]自动寻路NavMash
- Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
- Unity手游:自动寻路Navmesh入门
- Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
- unity手游自动寻路Navmesh入门
- 【小松教你手游开发】【unity系统模块开发】自动寻路Navmesh
- Unity里面的自动寻路
- Unity 自动寻路教程(2)
- Unity 自动寻路 Navmesh 之 跳跃,攀爬,斜坡
- Unity按固定路线自动寻路
- Unity自动寻路Navmesh之入门
- Unity 自动寻路Navmesh之跳跃,攀爬,斜坡
- 用iTween在Unity实现自动寻路的功能
- Unity物体在多个物体之间循环自动寻路
- unity 3D:自动寻路
- Unity 自动寻路Navmesh之高级主题
- unity 高级自动寻路(Advanced AI Pro 6.0插件)官网文档翻译(—)
- Unity自动寻路Navmesh之高级
- Unity 自动寻路Navmesh之入门
- 【unity系统模块开发】自动寻路Navmesh