Unity中的Navigation导航系统介绍

Unity NavMesh系统包含以下部分:

  • NavMesh(导航网格的简称) Unity自动构建的文件。
  • NavMesh Agent组件 添加到角色身上,控制角色朝向目标移动,避免彼此的角色碰撞
  • Off-Mesh Link 组件 允许角色在指定俩物体上的网格跳越
  • NavMesh Obstacle 组件 添加到障碍身上。角色会绕过障碍物

NavMesh

所有标记为导航静态(Navigation)的游戏对象才可以生成NavMesh
Unity中的Navigation导航系统介绍

在Unity中,NavMesh生成从导航窗口处理(菜单:Window > AI > Navigation)。
Unity中的Navigation导航系统介绍
为场景

  • 构建NavMesh 可以通过几个步骤完成:
    选择构建地形的物体设置为Navigation Static
  • 调整Navigation窗口Bake设置(agent 是角色)
  1. Agent Radius定义agent 的中心与墙壁或壁架的接近程度。
  2. Agent Height定义agent 可以达到的空间的低度。
  3. Max Slope定义了agent 人走上坡道的陡峭程度。
  4. Step Height 可定义agent 可以踩踏的障碍物的高度。
  • 单击Bake以构建NavMesh。
    构建出来的导航网格在编辑场景中显示为蓝色(在游戏场景中是不会显示的)
    烘焙完成后,在文件夹中有一个NavMesh文件,该文件与NavMesh所属的场景同名。例如,如果在Assets文件夹中有一个名为First Level的场景,则NavMesh将位于Assets> First Level> NavMesh.asset。
    Unity中的Navigation导航系统介绍

NavMesh Agent组件

在场景中新建一个胶囊体作为角色,为其添加NavMeshAgen组件,再新建一个脚本(PalyerMovement.cs )控制角色移动,挂在角色上,脚本内容如下

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

public class PalyerMovement : MonoBehaviour {

    private NavMeshAgent agent;

    void Start()
    {
        //获取角色上的NavMeshAgent组件
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        //鼠标左键
        if (Input.GetMouseButtonDown(0))
        {
            //射线检测
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            bool isCollider = Physics.Raycast(ray, out hit);
            if (isCollider)
            {
                //hit.point射线触碰的Position
                //SetDestination设置下一步的位置
                agent.SetDestination(hit.point);
            }
        }
    }
  
}

运行场景测试移动
Unity中的Navigation导航系统介绍
手册还有很多API,下面介绍NavMeshAgent组件常用属性
Unity中的Navigation导航系统介绍

Agent Size

当我们给角色添加NavMeshAgent组件时,角色上会有一个圆柱形的线框这不是collider,它是用来计算agent寻路,避开障碍物的

Radius,Height,控制它的半斤,高度,Base offset 设置基础偏移
Unity中的Navigation导航系统介绍

Steering

设置角色移动
Speed 移速度
Angular Speed 角速度
Acceleration 加速度
StoppingDistance 到目标前的暂停距离
Auto Braking 是否自动暂停

Nav Mesh Obstacle

Unity中的Navigation导航系统介绍
Shape 形状矩形/胶囊
Center 形状的中心点
Size 形状的大小
Carve 勾选Carve 后,Nav Mesh Obstacle会在NavMesh中创建一个洞。
CarveOnlyStation启用后,只有在静止时才会烘焙障碍物。

Off-Mesh Link

Unity中的Navigation导航系统介绍
Start起始位置的对象。
End结束位置的对象。
CostOverride 耗费 -1表示耗费0,是正数的话,如果值为3,则在离网格链接上移动将比的默认NavMesh 上移动相同距离要多耗费3倍的区域。
BiDirectional 如果启用,则可以在任一方向上跳跃。否则,它只能从Start到End遍历
Activated 是否**此链接
Auto Update Positions启用后,当终点移动时,Off-Mesh链接将重新连接到NavMesh。如果禁用,即使移动了端点,链接也将保持在其起始位置。

我把测试用的场景打包到百度云了,我的Unity是2017.2.4版
链接:https://pan.baidu.com/s/11Of5GXlS7pQMl5cnOPeq5w
提取码:ovnk