之前我们一起学习了如何使用Navmesh组件来实现最基本的角色自动寻路。今天我们再继续深入探索Navigation组件的高级功能。在本文中,你将了解到如何在两个隔离层自动生成寻路网格?如何手动指定寻路网格的路线?以及寻路网格层的应用。(本文所用到的模型皆来自Unity3d官网)。
(转载请注明原文地址http://blog.csdn.net/janeky/article/details/17492531)
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour
{
private NavMeshAgent agent;
public bool setAgentWalkMask;//是否需要动态修改寻路层,在scene4的实例中要用到
void Start()
{
//获取寻路组件
agent = GetComponent();
}
void Update()
{
//鼠标左键点击
if (Input.GetMouseButtonDown(0))
{
//摄像机到点击位置的的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
//判断点击的是否地形
if (!hit.collider.tag.Equals("Plane"))
{
return;
}
//点击位置坐标
Vector3 point = hit.point;
//转向
transform.LookAt(new Vector3(point.x, transform.position.y, point.z));
//设置寻路的目标点
agent.SetDestination(point);
}
}
//播放动画
if (agent.remainingDistance == 0)
{
animation.Play("Idle");
}
else
{
animation.Play("Run");
}
}
}
5.点击任意的位置,可以看到角色都能自动寻路过去
//动态设置寻路路径层
void OnGUI()
{
if (!setAgentWalkMask)
{
return;
}
if (GUI.Button(new Rect(0, 0, 100, 50), "走下层"))
{
agent.walkableMask = 65;
}
if (GUI.Button(new Rect(0, 100, 100, 50), "走上层"))
{
agent.walkableMask = 129;
}
}
3.重新点击寻路,可以看到,选择不同的寻路层,角色的寻路路径也不同
看到代码中的agent.walkableMask = 65和129,大家会比较迷惑,其实寻路层每一层都是2的幂,见下图