概念
Nav Mesh导航网格
Nav Mesh导航网格是3D游戏中,用于实现动态物体自动寻路的技术
它将游戏场景中复杂的对象结构组织,简化为带有一定信息的网格。在这些网格的基础上,通过一系列的计算实现自动寻路
Unity能自动生成Nav Mesh导航网格
Nav Mesh Agent导航代理组件
Unity的Nav Mesh Agent是配合导航网格使用的导航代理组件
给物体添加导航代理组件后,物体会自动根据目标位置和导航网格,寻找合适的路线,沿着找到的路线移动到目标位置
生成导航网格
选中用于生成导航网格的物体
在Navigation视图中点击bake按钮生成导航网格
Nav Mesh Agent导航代理组件可设置的属性包括:
导航代理的尺寸
导航代理的运动属性
闪避、寻路等行为的属性
示例演示
搭建场景,实现绿色小球自动寻找小球
![](https://i-blog.csdnimg.cn/blog_migrate/855b8c62c23e175ec8b20db845b417d4.png)
选中需要烘焙的物体,打开Navigation窗口(菜单栏Window——AI——Navigation),点击Bake进行烘焙,出现导航网格。下面是烘焙过后的场景
![](https://i-blog.csdnimg.cn/blog_migrate/cab1acebec504501d7484033952f537d.png)
作为追踪者的绿色小球,勾选Navigation Static,然后添加Nav Mesh Agent组件(添加方法:1.Inspector最下方的Add Component。2.菜单栏Component——Navigation——Nav Mesh Agent)
![](https://i-blog.csdnimg.cn/blog_migrate/ada1f318ebfc7fd6fe4791dd44a97da7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/575d886c88830838e8e965a303711b0e.png)
最后给绿色小球挂个脚本,回到Unity点击运行即可看见绿色小球自动追踪到红色小球(不管红色小球在导航网格上如何移动都可以找到)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class NavigationMove : MonoBehaviour
{
NavMeshAgent agent;
private GameObject Enemy;
// Start is called before the first frame update
void Start()
{
//获取自身Navigation组件
agent = GetComponent<NavMeshAgent>();
//获取小球
Enemy = GameObject.Find("Enemy").gameObject;
}
// Update is called once per frame
void Update()
{
//寻找红色小球
agent.SetDestination(Enemy.transform.position + Vector3.up * 0.5f);
}
}