Unity之自动寻路

    xiaoxiao2021-04-18  98

    小白欢迎评论,共同探讨,共同进步

     

    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,即障碍物清除)

     

    转载请注明原文地址: https://ju.6miu.com/read-675012.html

    最新回复(0)