Unity寻路组件navigation的使用与Navigation烘焙的简单总结

1.建立一个Cube,Plane,Player(胶囊)

然后我们选中地面Plane,点击window下拉列表中可以看到Navgation,点击打开寻路生成界面,选择“navigation static”全网格静态。“Bake”,烘焙地面,作为Player移动的地面。

Player上,除了代码,还需要添加Add Component——Navigation——Nav Mesh Agent。

Player的代码:

using UnityEngine;
using System.Collections;
using UnityEngine.AI;
public class XunLu : MonoBehaviour {
    public NavMeshAgent nav;    //都在寻路者身上加(组件,脚本)

    void Start() {
        nav = GetComponent();
    }

    void Update() {
        if (Input.GetMouseButton(0)) {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo, 100)) {
                Debug.DrawLine(ray.origin, hitInfo.point, Color.red);
                Debug.Log(hitInfo.point);
                nav.SetDestination(hitInfo.point);
            }
        }
    }
}

此脚本意思:当点击鼠标左键时,从摄像机发射一条长100米的射线;我们可以看见一条红色的射线;并且输入碰击点的坐标;寻路目标就是鼠标点击点,Player跟着这个点寻路移动。

这个代码稍加修改就可以做出“点击地面,Player移动”的效果,网游中。

这个摄像机射线+寻路:

寻路的平面及物体必须具备Mesh Renderer网格渲染器,否则不可以寻路。


2.绕过障碍物自动寻路代码,

using UnityEngine;
using System.Collections;

public class XunLu : MonoBehaviour {
    public NavMeshAgent nav;    //都在寻路者身上加(组件,脚本)     //引用寻路网格组件
    public GameObject target;   //引用寻路目标对象组件     前台把寻路目标拖进即可
    void Start() {
        nav = GetComponent();      //获取寻路网格组件
    }

    void Update() {
        nav.SetDestination(target.transform.position);      //设置寻路目标 (vector3类型)
     nav.Stop();//停止寻路

}}保存脚本,然后绑定到Player对象上,运行测试


3.Nav Mesh Agent组件参数面板参数: 

Base Offset表示碰撞模型和实体模型之间的垂直偏移量,改变数值看上去模型所在高度会变,具体功能有待探索;Angular Speed表示转弯角速度,

Auto Repath表示因为某些原因中断后是否重新开始寻路。

Obstacle Avoidance Type表示障碍躲避类型,None选项为不躲避障碍,等级越高,躲避效果越好,同时消耗的性能越多。


4.Navigation烘焙bake面板参数:

根据你的agent大小来调

Agent Radius : agent可以距离墙体 ,窗户或边缘多近的距离。 

Agent Height : agent可以通过的最低的空间高度。 

Max Slope : agent可以直接行走上去的最小坡度。 

Step Height: agent可以踩上(走上)的障碍物最高高度。 

点击bake按钮烘焙NavMesh。

你可能感兴趣的:(自学)