Unity3D 自带有自动寻路的组件,我也是初次学习,写下心得供各位参考参考。。
先直接写下使用方法,先明白怎么用,熟了之后再去了解为什么会这样。
就用一个鼠标点击寻路来演示吧。。。
首先我们新建一个plane和几个cube来构建一个简单的场景,如下图所示:
图中的球是我们要用来控制的角色,需要将除了球以外的所有物体勾选上Inspector窗口里的Navigation Static:
接下来,选择菜单栏->Window->Navigation打开Navigation窗口,选择每个物体,勾选上,Navigation Static选项,下面的选项暂时可以不用管。将障碍物的Navigation Layer选项选择为Not Walking,plane的Navigation Layer选择为Default。
全部搞定以后点击窗口底部的Bake按钮,场景会变成如下样子:
浅蓝色那一层就是我们创建出的路径图了。是不是很简单。。。
下一步我们来控制我们的角色。
选择圆球,单击->Component->Navigation->Nav Mesh Agent来给圆球添加一个寻路代理组件(里面的参数先别管,都默认就行了,等熟悉了再去慢慢研究)。
然后给通过一段代码来控制圆球,控制圆球的代码如下:
using UnityEngine;
using System.Collections;
public class NavMeshMove : MonoBehaviour {
private NavMeshAgent m_nma;//寻路代理组件
private Camera m_camera;
private RaycastHit m_hitPoint;
private Ray m_ray;
private LayerMask m_mask;
// Use this for initialization
void Start ()
{
m_nma = GetComponent<NavMeshAgent>();
m_camera = Camera.main;
m_mask = 1 << 8;
}
// Update is called once per frame
void Update ()
{
if (Input.GetMouseButtonDown(1))
{
Physics.Raycast(m_camera.ScreenPointToRay(Input.mousePosition), out m_hitPoint, Mathf.Infinity, m_mask);
Debug.Log(m_hitPoint.point.ToString());
m_nma.SetDestination(m_hitPoint.point);
}
}
}
将代码附到圆球上去。运行,鼠标点击平面任意位置,小球变开始演示寻路效果了。