|
先看下面的演示效果:

里面主要用到Unity的自帶網(wǎng)格尋路(NavMesh)和LineRanderer,核心思想是獲取unity 的網(wǎng)格尋路的點,再把這些點賦予LineRanderer;
相關(guān)代碼如下:
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.腳本掛相機上
額外補充:如果要時刻創(chuàng)建障礙物,或者說場景里有個非靜態(tài)的帶剛體的物體,角色移動過去想要繞開他,如何做呢?
答案是在該物體上天劍NavMeshObstacle就可以了:
記得把Carve勾上

|