Unity 寻路并显示预行走路线

 先看下面的演示效果: 
  

Unity 寻路并显示预行走路线_第1张图片


里面主要用到Unity的自带网格寻路(NavMesh)和LineRanderer,核心思想是获取unity 的网格寻路的点,再把这些点赋予LineRanderer;

相关代码如下:

using UnityEngine;
using System.Collections;


public class CubeMove : MonoBehaviour {
    NavMeshAgent _Nav;
    LineRenderer _LineRenderer;
    RaycastHit hit;
    public GameObject Cube;
    Vector3 endPoint;


// Use this for initialization
void Start () {
        _Nav = Cube.transform.GetComponent();
        GameObject r = Resources.Load("LineRender") as GameObject;
        GameObject r1 = GameObject.Instantiate(r);
        _LineRenderer = r1.transform.GetComponent();
        _LineRenderer.SetWidth(0.1f, 0.1f);
        _LineRenderer.SetColors(Color.blue, Color.green);
        endPoint = Cube.transform.position;
}

// Update is called once per frame
void FixedUpdate () {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
           
            if (Physics.Raycast(ray, out hit))
            {
                Debug.DrawLine(ray.origin, hit.point,Color.red);
               // print(hit.point);                
                _Nav.SetDestination(hit.point);        //NavMeshAgent自带移动方法      
                print(_Nav.path.corners.Length);
            }
        }
        if(_Nav.path.corners.Length>1)                  //时刻检测路线的点,当大于1的时候,把这些点赋予给LineRenderer来绘制出线条
        {
            _LineRenderer.SetVertexCount(_Nav.path.corners.Length);
            _LineRenderer.SetPositions(_Nav.path.corners);
        }         
    }
}

1.需要在Resources下放置一个名字为“LineRender”预制体,上面挂有Linerenderer的组件

2.cube身上要添加NavMeshAgent这个组件

3.脚本挂相机上

额外补充:如果要时刻创建障碍物,或者说场景里有个非静态的带刚体的物体,角色移动过去想要绕开他,如何做呢?

答案是在该物体上天剑NavMeshObstacle就可以了: 

记得把Carve勾上

Unity 寻路并显示预行走路线_第2张图片

你可能感兴趣的:(unity)