导航和寻路
- 导航网格
- Navigation介绍
- 代码控制物体小球运动
- NavMeshAgent组件
导航网格
首先在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描述了代理在寻路时将考虑的区域类型。在准备网格进行导航网格烘焙时,可设置每个网格区域类型。例如,可将楼梯标记为特殊区域类型,并禁止某些角色类型使用楼梯。