寻路导航NavMesh
Unity中对于寻路算法进行了封装,支持提交将地图进行导航烘焙,降低了实时计算的消耗
菜单Window–>Navigation,打开导航面板
操作
-
选择不移动的游戏对象,勾选Navigation Static
-
如果是不连接的游戏对象,勾选 Generate OffMeshLinks
-
如果需要设置区域,可以在属性 Navigation Area下选择,使用方式与层一样
-
点击Areas标签,可以添加区域,内置创建了三个区域,表示可以行走、不可以行走、可跳跃
-
选择完成后,点击Back按钮完成烘焙,点击 Clear按钮清除已烘焙的数据
Demo
建立一个简单的demo来演示寻路导航效果,在一个拥有一堵墙的平面上,要求使用navigation自动导航将小球运动到鼠标点击的位置。
建立的场景如图:
将平面设置为walkable、墙设置为unwalkable.生成的导航线路图如蓝色区域。
为小球添加Nav Mesh Agent组件,已完成自动导航功能。
编写c#脚本完成相应功能:
public class NavMeshDemo : MonoBehaviour
{
private NavMeshAgent agent;
// Start is called before the first frame update
void Start()
{
agent = GetComponent<NavMeshAgent>();
}
// Update is called once per frame
void Update()
{
if (Input.GetButtonDown("Fire1")) {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100f)) {
agent.SetDestination(hit.point);
}
}
}
}
分层区域导航
根据不同的分层区域可以为物体设定不同的导航路线,下列是实现改分层区域导航的demo。通过为不同颜色小球设定不同颜色通行的路径来进行分层区域导航,使得小球可以到达方块的位置。
为不同的路径设定不同的area:
为不同颜色小球设定不同的Area Mask,以红色小球为例:
为小球建立相应的脚本:
public class NavMeshAreaDemo : MonoBehaviour
{
private GameObject cube;
// Start is called before the first