Unity 寻路并显示预行走路线

    xiaoxiao2021-03-25  70

    先看下面的演示效果:

    里面主要用到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勾上

    转载请注明原文地址: https://ju.6miu.com/read-38928.html

    最新回复(0)