Unity 寻路并显示预行走路线
里面主要用到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勾上