效果展示:
思路:
1、实现自动寻路功能
2、实现划线功能
一、实现自动寻路功能
1、按上图所示,完成场景布置
2、按本博客:完成:实践过程 1烘焙路径
二、实现划线功能
1、创建空物体LineRender,添加LineRender组件,并赋值材质球。
将其做成预制体放到Resources文件夹下,删掉层级面板的LineRender
2、将下方代码挂在MainCamera上,并把设置了NavMeshAgent的Cube赋值进去
3、Enjoy~
代码语言:javascript复制using UnityEngine;
using UnityEngine.AI;
public class CubeMove : MonoBehaviour
{
NavMeshAgent _Nav;
LineRenderer _LineRenderer;
RaycastHit hit;
public GameObject Cube;
void Start()
{
_Nav = Cube.transform.GetComponent<NavMeshAgent>();
GameObject r = Resources.Load("LineRender") as GameObject;
GameObject r1 = Instantiate(r);
_LineRenderer = r1.transform.GetComponent<LineRenderer>();
_LineRenderer.SetWidth(0.1f, 0.1f);
_LineRenderer.SetColors(Color.blue, Color.green);
}
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);
}
}
}