Navigation

本文详细介绍了Unity中NavMesh导航网格的生成与设置,包括参数调整、运动控制、障碍物处理及路径寻找技巧。通过实例代码展示了如何利用NavMeshAgent组件实现角色自动寻路,适合游戏开发和AI编程爱好者学习。
摘要由CSDN通过智能技术生成

01.在这里插入图片描述
在这里插入图片描述02.生成NavMesh导航网格
标记一些静态物体为 Navigation Static
在这里插入图片描述
烘焙
在这里插入图片描述
03.相关参数设置

Radius:半径。半径数值越小,生成网格面积越大,越容易靠近被烘焙过的静态物 体。

Height:高度。整体网格可以烘焙到的高度。1和2可以理解为寻路者的半径和高度

Max Slope:最大斜坡角度。角度越大,代理越能爬坡 ,超过这个坡度寻路者则无法通过。

Step Height:台阶步高。步高越大,导航代理迈过台阶的能力越强(可达到或代替跳跃效果)。

Drop Height:代理跳落高度。(只能往下跳,不可往上跳)。表示寻路者可以跳落的高度限。

Jump Distance:代理跳跃距离。(往远处跳跃的距离)。 表示寻路者的跳跃距离极限

Advanced高级模式(最好别动.)

Manual Voxel Size 导航烘焙的像素效果

Min Regon Area:网格面枳小于该值的地方,将不生成导肮网格。

Height Mesh:勾选后,将会保存高度信息。

04.导航运动和运动相关设置
在这里插入图片描述
Radius:半径。
Height:高度。
Base Offset:偏移值。
在添加了NavMeshAgent组件的对象上直观的影响。

Paste_Image.png

调节以上参数,将会影响外部的Agent线框。
Base Offset指的是Y轴上的偏移。
Steering(操控行为(详情见Game AI篇,AI底层))

Paste_Image.png

Speed:在NavMesh上移动的最大速度
Angular Speed:角速度
Acceleration: 物体从静止到最大速度的加速度
Stopping Distance:停止距离(常与remainingDistance一起使用)
Auto Braking:是否自动减速。(不勾选的话如果速度太快,物体会冲过去目标点以一定的惯性返回目的地)
Obstacle Avoidance(避障)

Paste_Image.png

Obstacle Avoidance
Quality(质量)(枚举)
None : 无
Low Quality:低质量
Medium Quality:中等质量
Good Quality: 高质量
High Quality: 高质量
Priority: 优先值,低优先值的会给高优先值的让路。
Path Finding(路径跟随)
Path Finding
Auto Traverse Off Mesh Linked:
是否自动分离网格。(勾选时到达分离点时会从该分离点移动到另外一个分离点。)(一般不勾选,因为要配套爬墙或者跳跃的动画)

Auto Repath
是否自动重新规划路线。

Area Mask
网格遮罩。(枚举,规定物体可以通过的区域)

NavMeshAgent API 官方API
NavMeshAgent API:

Paste_Image.png

在检视面板中看到的Agent参数都可以用过脚本获取并控制。

一些常用的参数。

destination属性:可以设置目标点(SetDestination(target)方法相同效果)

nextPosition:获取或设置模拟navmesh代理的位置,可以手动的驱动角色进去移动(配合动画使用)

remainingDistance:物体当前位置与目标点的剩余距离。(设置了StopDistance后会出现一个问题,到时可以用这两个参数去调节)

UpdatePosition,UpdateRotation两个值都为bool值,可以通过更改他们俩,停止使用Agent组件来驱动物体移动和旋转。

isOnNavMesh: 判断物体是否在导航网格上。

isOnOffMeshLink: 判断物体是否在分离网格链接上。

常用方法。
SetDestination(Vector3 position): 设置目标点。
Stop(): 停止寻路。
ResetPath():清空当前路径。
Resume(): 停止游戏角色进行移动,并重新开始移动(原路径)。
Wrap(Vector3 position):将物体瞬移到目标点。

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

public class Player : MonoBehaviour
{
    private NavMeshAgent navMeshAgent;
    public Transform target;
    void Start()
    {
        navMeshAgent = this.GetComponent<NavMeshAgent>();
        navMeshAgent.SetDestination(target.position); //设置目标点
    }

    
}

在这里插入图片描述
05.设置子物体是障碍物 不烘焙
在这里插入图片描述
06.设置花费
在这里插入图片描述
在这里插入图片描述

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

public class Player : MonoBehaviour
{
    private NavMeshAgent navMeshAgent;
    public Transform target;
    void Start()
    {
        navMeshAgent = this.GetComponent<NavMeshAgent>();
        navMeshAgent.SetDestination(target.position); //设置目标点
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //使用主摄像机创建一根射线,射线的方向是鼠标点击的位置。
            Ray ray =Camera.main.ScreenPointToRay(Input.mousePosition);
            //使用物理类检查射线的碰撞,如果点击物体存在
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                navMeshAgent.SetDestination(hit.point);
            }

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值