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