目录

序言

一、Navigation的基础介绍

二、场景搭建

三、场景烘焙搭建

四、物体Nav Mesh Agent说明

五、Nav Mesh Areas 与 Agents

六、Off Mesh Links

七、Nav Mesh Obstacle介绍

八、最后一项——实例

九、最最最后一项——收工

序言
首先啊,说一哈Navigation导航系统,这是Unity3D中自带的一个组件。使用这个,可以轻松实现AI自动寻路。

    当然啦,除去Navigation,比较著名的还有A*导航,但受限于篇幅(和作者的懒惰),先不提它。

一、Navigation的基础介绍
首先是它的组件位置

    然后里面会有三个组件

Nav Mesh Agent:物体的导航组件,放在需导航物体上

Nav Mesh Obstacle:可以理解为障碍物

Off Mesh Link会在后面详细介绍。

接着是他的窗口位置

二、场景搭建
不多说了,直接上图

应该都看的懂

三、场景烘焙搭建
首先的首先,一定要把场景Static打开,静态才能导航烘焙!!!

    打开Navigation窗口

说一下里面的参数意义:

Agent Radius:距离边界的半径距离

Agent Height: 可以通行的最大高度

Max Slope:物体爬坡的最大角度

Step Height:爬台阶的最大高度

Drop Height:最大下落高度,就是你从坡坡上头跳下来的最大高度

Jump Distance:最大跳跃距离,就是从坡坡这头跳到坡坡那头的最大距离

还有,每次改变场景就要重新渲染一次!

四、物体Nav Mesh Agent说明
首先,先说哈物体组件的参数:

(不知道为什么上传的时候就模糊了)

还是先说说参数含义:

Agent Type:可以理解为物体的导航类型,可以在Navigation窗口更改

Speed:物体移动的最大速度(说最大速度是因为它存在一个加速过程)

Angular Speed:角速度,就是物体旋转的速度,高中讲过

Acceleration:最大加速度,说最大是因为它的速度与时间不成线性关系

Stopping Distance:制动距离,到达后距离目的点的距离

Auto Braking:到达后是否直接停止,就是你勾了这个选项就会有缓冲

Radius:躲避障碍物的半径

Height:同理,躲避障碍物的高度(光说不好理解,可以去改改参数自己看效果)

Quality: 物体躲避的品质,这个的选择与性能挂钩

其余的啊基本不需要去改它。

五、Nav Mesh Areas 与 Agents

Agents
Areas

Agents:物体移动的属性

与前面讲的差不多,可以对照着看

Areas:导航网格的区域。

主要是后面的Cost。这是根据最短价格寻找路径。

六、Off Mesh Links
这个主要是为了添加导线,在场景中会出现一些绕路的情况,为此,会使用这个组件来解决这个问题。

先看图

这里有两个坨坨,我们上不去,但偏偏就想上去。

那么……

就像这样,两个就被连起来了。

可以实现两地的连接。

七、Nav Mesh Obstacle介绍
Shape:模式选择,有方块和胶囊两个选项。

Center与Size:就是阻挡箱的大小。

Carve:是否重新渲染,如果障碍物是实时运动的,那就不要选,不然消耗资源 。

八、最后一项——实例
先说一下代码中的一些方法:
Move :移动到相对于当前位置的点,可以理解为矢量叠加
ResetPath :清除当前选择的路径
SetDestination :设置目标点,并计算出最优路径
SetPath :设置一条路线
Warp :瞬移到某点,目标点用位矢表示

注意:要先引用 AI模块。

using UnityEngine;
using UnityEngine.AI;

public class PlayerScript : MonoBehaviour
{
public NavMeshAgent player;
public LineRenderer lineRenderer;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector3 Mouse = Input.mousePosition;
Ray ray = Camera.main.ScreenPointToRay(Mouse);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
player.SetDestination(hit.point) ;
Vector3[] path = player.path.corners;
for(int w = 0; w < 2; w++)
{
for (int i = 0; i < path.Length; i++)
{
path[i] = path[i] + new Vector3(0, 1, 0);
}

                lineRenderer.SetVertexCount(path.Length);
                for (int i = 0; i < path.Length; i++)
                {

                    lineRenderer.SetPosition(i, path[i]);
                }
            }
             
        }
         
    }
}

}

    我也让它实现了画出即将走的路线,也使用了Ray的探测。

这个只能作为例子,还有很多可以添加的地方。

九、最最最后一项——收工
很完美,又搞完了。

这篇讲的U3D,希望我们共同进步。

感谢读者朋友些。

转载要说哈。

文章转自:[Unity3D]Navigation导航系统讲解及其应用_其他-答学网

作者:答学网,转载请注明原文链接:http://www.dxzl8.com/

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐