分享

Unity 寻路并显示预行走路线

 鸿蛟家平 2019-06-10
                先看下面的演示效果:


里面主要用到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<NavMeshAgent>();
        GameObject r = Resources.Load("LineRender") as GameObject;
        GameObject r1 = GameObject.Instantiate(r);
        _LineRenderer = r1.transform.GetComponent<LineRenderer>();
        _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勾上


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多