这里需要实现的效果,
自动导航,沿着轨迹行走,后面出现移动轨迹。
需要组件,一个是NavMeshAgent,一个是LineRenderer组件,
//绘制线条的核心代码:
//1多少个拐点
//m_line.SetVertexCount ();
//2拐点的位置
//m_line.SetPositions ();
//m_line.SetVertexCount ();找导航的数据
NavMeshAgent m_nav;
LineRenderer m_line;
Ray m_ray;
RaycastHit m_hit;
Vector3 m_tarpos;
void Awake ()
{
m_nav = GetComponent <NavMeshAgent> ();
m_line = GetComponent <LineRenderer> ();
//设置线性渲染组件没有被激活;`这里写代码片`
m_line.enabled = false;
}
void Update ()
{
if (Input.GetMouseButtonDown (0)) {
//激活线性渲染组件
m_line.enabled = true;
m_ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (m_ray, out m_hit)) {
m_tarpos = m_hit.point;
//设置路径的点,
NavMeshPath path = new NavMeshPath ();
//路径 导航。
m_nav.CalculatePath (m_tarpos, path);
//线性渲染设置拐点个数。数组类型的。
m_line.SetVertexCount (path.corners.Length);
//线性渲染的拐点位置,数组类型,
m_line.SetPositions (path.corners);
m_nav.SetDestination (m_tarpos);
}
}
}
}
这样物体移动后,后面的轨迹线还在,需要优化一下。
public class xianxingxuanran : MonoBehaviour
{
NavMeshAgent m_nav;
LineRenderer m_line;
Ray m_ray;
RaycastHit m_hit;
Vector3 m_tarpos;
void Awake ()
{
m_nav = GetComponent <NavMeshAgent> ();
m_line = GetComponent <LineRenderer> ();
m_line.enabled = false;
}
void Update ()
{
NavMeshPath path = new NavMeshPath ();
if (Input.GetMouseButtonDown (0)) {
m_line.enabled = true;
m_ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (m_ray, out m_hit)) {
m_tarpos = m_hit.point;
}
}
//设置路径的点,
//路径 导航。
m_nav.CalculatePath (m_tarpos, path);
//线性渲染设置拐点的个数。数组类型的。
m_line.SetVertexCount (path.corners.Length);
//线性渲染的拐点位置,数组类型,
m_nav.SetDestination (m_tarpos);
m_line.SetPositions (path.corners);
}
}