Unity-八(导航和寻路)

导航网格

首先在Unity中创建一个简单的场景。
在这里插入图片描述
将小球添加Nav Mesh Agent组件,在Windows中找到AI添加Navigation(导航) ,会出现Navigation
在这里插入图片描述

选中所有的静态物体,勾选Navigation Static 在Bake界面中点击Bake按钮。Scene视图下会出现导航网格。

Navigation介绍

Object

属性 功能
Scene Filter 场景滤镜
All 设置所有的对象
Mesh Renderer 除相机和光照外,设置所有的对象
Terriain 只设置地形
Navigation Static 勾选后表示该对象参与导航网格的烘焙
Generate OffMeshLinks 勾选后可在导航网格中跳跃(Jump)和下落(Drop)
Navigation Area 导航区域

Bake

属性 功能
Agent Radius 设置具有导航网格代理的物体半径,半径越小,生成的网格面积越大
Agent Height 设置具有导航网格代理的物体的高度
Max Slope 设置最大允许到达斜坡的坡度
Step Height 设置允许到达台阶的高度
Drop Height 设置允许最大的下落距离
Jump Distance 设置允许最大的跳跃距离
Manual Voxel Size 设置是否手动调整烘焙尺寸
Voxel Size 设置烘焙的单元尺寸,控制烘焙的精度
Min Region Area 设置最小区域
Height Mesh 设置当地形有落差时是否生成精确而不是近似的烘焙效果

Agent

属性 功能
Name 具有导航网格代理的物体的名字
Ridus 物体的半径
Height 物体的高度

代码控制物体小球运动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public  class ray : MonoBehaviour
{
    
    
   NavMeshAgent agent;
    public Transform red;
    private void Start()
    {
    
    
        agent = GetComponent<NavMeshAgent>();
    }
    public void Update()
    {
    
    
        if (Input.GetMouseButtonDown(0))
        {
    
    
            RaycastHit hit;
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从相机发射一条射线到点击处
            if (Physics.Raycast(ray, out hit, Mathf.Infinity))
            {
    
    
            //如果点击场景中一点则小球通过计算从最近的距离移动到这一点
              agent.SetDestination(hit.point);
              red.position = hit.point;//点击处出现红色小球标注便于观察
            }
        }
    }
}

NavMeshAgent组件

1.Steering[操作]

Speed[速度]:导航的移动速度;
Angular Speed[转弯速度]:模型是Z轴朝向目标点;如果不是,则转向;
Acceleration[加速度]:保持默认即可;
Stopping Distance[停止距离]:距离目的地多远的时候停止;
AutoBraking[自动停止]:保持默认勾选状态即可。

2.Obstacle Avoidance

Radius[半径]:控制代理器这个“圆柱体”的半径,也就是大小; Height[高度]:控制代理器这个“圆柱体”的高度;
Qualty[质量]:避障质量。如果您拥有大量代理,则可以通过降低避障质量来节省CPU时间。
priority[优先级]:执行避免时,此代理将忽略优先级较低的代理。该值在0-99范围内,其中较低的数字表示较高的优先级。

3.Path Finding

Auto Traverse OffMesh Link 设置为 true 可自动遍历网格外链接 (Off-Mesh Link)。如果要使用动画或某种特定方式遍历网格外链接,则应关闭此功能。
Auto Repath启用此属性后,代理将在到达部分路径末尾时尝试再次寻路。当没有到达目标的路径时,将生成一条部分路径通向与目标最近的可达位置。 Area
Mask Area Mask描述了代理在寻路时将考虑的区域类型。在准备网格进行导航网格烘焙时,可设置每个网格区域类型。例如,可将楼梯标记为特殊区域类型,并禁止某些角色类型使用楼梯。

猜你喜欢

转载自blog.csdn.net/AD_GOD/article/details/123740887