您的位置:首页 > 移动开发 > Unity3D

Unity之自动寻路

2017-04-14 15:19 387 查看
小白欢迎评论,共同探讨,共同进步


 

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很诡异



 

(三)选择路段行走

使A、B各沿着自己的路线行走。



其实也很简单,下面来解说一下。

还是在Navigation界面,选择Areas给红蓝两条路添加自定义标签



然后返回Obj界面,选择红色道路对应标签(以红色为例)



然后选择红色小人,更改组件中的Area Mask,可以走哪条线路,就勾那个。接下来烘焙一下,就可以运行来,会发现红色只走红色道路到达对面。



 

(四)障碍物组件。

NavMeshObstacle 导航网格障碍

导航网格躲避的障碍。

下面圣典的解释,再添加一些自己的话,使其比较容易理解。

障碍仅影响代理的躲避行为而不是寻路。这意味着当测绘路径时代理将会忽略该障碍,但是沿着路径移动时代理将会在障碍的附近回避。
如果启用carving,因此测绘路径时将会避免该障碍。(可以理解为没有烘焙此障碍物,不能通过。【实际事实是烘焙过的】)这意味着如果说障碍阻塞缺口,寻路将会寻找一个替代路线给目标。(也就是绕行)。



没有启用carving,障碍将会在导航网格上创建一个临时的“门”(路径是已被烘焙过的,但门是关着的)。该缺口(门)将会被寻路认可,代理将会朝缺口前进但是不可能通过缺口直到该障碍被清除。
(设置enable = flase,即障碍物清除)



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Unity