Unity之3D物理导航系统

一 介绍

Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路,比如可以制作点击某个位置,让角色自动的绕开障碍走到目标点的效果,比如可以制作敌人AI,让它可以通过NavMesh绕开障碍追击我方单位。甚至可以在NavMesh中设置传送门,跳跃的起点落点,让这些效果也参与寻路的计算,成功计算出导航的捷径

二  创建3D项目

2.1 新建核心3D模板

Unity之3D物理导航系统_第1张图片

2.2 新建Plane当作地面

Unity之3D物理导航系统_第2张图片

2.3 新建立方体当角色

Unity之3D物理导航系统_第3张图片

2.4  开启物理导航组件,窗口->包管理器->unity注册表

Unity之3D物理导航系统_第4张图片

2.5 给角色添加网格导航,Nav Mesh Agent选项

Unity之3D物理导航系统_第5张图片 Unity之3D物理导航系统_第6张图片

2.6 把地面组件勾选静态

Unity之3D物理导航系统_第7张图片

2.7 找到导航系统,烘培地面Window-->AI-->Navigation

Unity之3D物理导航系统_第8张图片 Unity之3D物理导航系统_第9张图片

2.8 编写脚本,新建C#脚本文件

Unity之3D物理导航系统_第10张图片

2.9 拖动挂载到角色上面,双击打开VS编辑

Unity之3D物理导航系统_第11张图片

Unity之3D物理导航系统_第12张图片

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class NewBehaviourScript : MonoBehaviour
{
    private NavMeshAgent agent;
    void Start()
    {
        agent = GetComponent();
    }


    RaycastHit hit;//碰撞体

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                agent.SetDestination(hit.point);

            }
        }
    }
}

2.10 保存,返回Unity运行,这个时候就能点击鼠标,物体自动移动到鼠标位置

Unity之3D物理导航系统_第13张图片

三 导航系统参数介绍

3.1 Unity 3D 导航系统由 1个Navigation总控制面板 和 3个组件 组成,该系统是由 A*算法 延伸扩展实现的,由4部分组成,分别是 Agents,Areas,Bake,Object

Unity之3D物理导航系统_第14张图片

3.2 常用的导航组件是自动寻路组件,障碍物组件,跳跃组件,如下图

Unity之3D物理导航系统_第15张图片

3.3 Agents面板,导航参数设置

Unity之3D物理导航系统_第16张图片

  • Name:设置烘焙 Agents 的名字。
  • Radius:烘焙的半径,也就是对象烘焙的半径。这个值影响对象能通过的路径的大小,值越小,能行走的路径越大,边缘区域越小。
  • Height:具有代表性的对象的高度,可以通过的最低的空间高度。值越小,能通过的最小高度越小。
  • Step Height:梯子的高度。需要根据模型阶梯的高度设置。

Max Slope:烘焙的最大角度,即坡度。

3.4 Areas面板,层设置,该面板可以设置在自动寻路时,对象可以通过那些层。 这里输入的名称会在 Object 面板的 Navigation Area 下显示

Unity之3D物理导航系统_第17张图片

3.5 Bake面板(烘焙导航网格

Unity之3D物理导航系统_第18张图片

  • Agent Radius:具有代表性的对象的半径,半径越小生成的网格面积越大。
  • Agent Height:具有代表性的对象的高度。
  • Max Slope:斜坡的坡度。
  • Step Height:台阶的高度。
  • Drop Height:允许最大的下落距离。
  • Jump Distance:允许最大的跳跃距离。
  • Min Region Area:网格面积小于该值则不生成导航网格。
  • Height Mesh:勾选后会保存高度信息,同时会消耗一些性能和存储空间。

3.6 Object面板,对象

在该面板中可以选择,设置要参与导航网格烘焙的对象,可以设置对象是可以被自动寻路的,如路面。也可以设置对象是不可以被自动寻路的(即不可行走),如湖面

Unity之3D物理导航系统_第19张图片

  • Generate OffMeshLinks:设置地面可跳跃。
  • Navigation Area:设置对象以特定的路线寻路。

四 各导航组件属性介绍

4.1 Nav Mesh Agent,自动寻路组件

Unity之3D物理导航系统_第20张图片

  • Agent Type:寻路类型,可以在 Navigation 总控制面板中设置类型。
  • Base Offset:偏移值。值越大越容易寻路,但是目标会偏移得越远。
  • Speed:对象自动寻路的速度。
  • Angular Speed:对象自动寻路的转弯速度。
  • Acceleration:加速度。
  • Stopping Distance:对象停下的距离。如果值设置为0,则在距离目标点为0处停下
  • Auto Braking:是否自动停下。
  • Radius:对象躲避障碍物的半径。大于这个半径无法躲避障碍物。
  • Height:对象躲避障碍物的等级。等级越高,躲避障碍物越准确。
  • Priority:优先级。值越大,障碍物躲避越优先。
  • Auto Traverse Off Mesh Link:自动跳跃链接。
  • Auto Repath:自动复制路径。
  • Area Mask:能通过的Mask层,可以配合 Navigation 组件中的 Areas 使用。

4.2 Nav Mesh Obstacle,障碍物组件

Unity之3D物理导航系统_第21张图片

  • Shape:障碍物的形状。
  • Center:障碍物的中心点坐标。
  • Size:障碍物的大小。
  • Carve:障碍物的网格。  

4.3 Off Mesh Link,跳跃组件

Unity之3D物理导航系统_第22张图片

  • Start:跳跃的开始点。
  • End:跳跃的结束点。
  • Cost Override:是否计算路径开销,即是否将寻路计入寻路距离。
  • Bi Directional:开始点和结束点是否可以互跳。
  • Activated:是否激活。
  • Auto Update Position:自动更新位置坐标。
  • Navigation Area:可以寻路的层。

你可能感兴趣的:(unity,游戏引擎)