Unity自动寻路功能的实现(三)并且动态显示路线

在Unity3d中实现点击目标点,然后出现引路线段,动态更新线段等功能 。
1,新建一个3D Object Plane 地面,添加一个Cube作为玩家,改名Player,创建1个目标Cube,改名为TargetPos,作为玩家要去的目标点 ,创建许多Cube,做成障碍区,我设置的如下:
Unity自动寻路功能的实现(三)并且动态显示路线_第1张图片

2·,烘焙可寻路区和障碍区,这个步骤同Unity自动寻路功能的实现(一),另外一篇文章。
3,给Player添加NavMeshAgent组件,LineRenderer组件。

Unity自动寻路功能的实现(三)并且动态显示路线_第2张图片
4,给Plane添加脚本AutoNav,如下

using UnityEngine;
using UnityEngine.AI;
//自动寻路3,动态出现引导路线
public class AutoNav : MonoBehaviour
{
    private NavMeshAgent agent;
    private LineRenderer lineRenderer;
    public Transform target;
    void Start()
    {
        agent = GetComponent();
        lineRenderer = gameObject.GetComponent();
        agent.SetDestination(target.position);//设置自动寻路到目标点
    }
    void Update()
    {
        OnClick();
        setRoute();//路线要时时更新,所以要在update更新
    }
    void OnClick()
    {   //当点击鼠标左键时,从摄像机发射一条长100米的射线;我们可以看见一条红色的射线;并且输入碰击点的坐标;寻路目标就是     鼠标点击点,Player跟着这个点寻路移动。
        if (Input.GetMouseButton(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//指定Camera,向鼠标点击处发ray射线,Camera.main用于指定某个Camera,Camera.main就表示Tag为MainCamera的Camera
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo, 100))
            {
                Debug.DrawLine(ray.origin, hitInfo.point, Color.red);
                Debug.Log("鼠标点击名称:" + hitInfo.transform.name);
                Debug.Log("鼠标点击坐标" + hitInfo.point);
                agent.SetDestination(hitInfo.point);
            }
        }
    }
    void setRoute()
    {
        //储存自动寻路的点的世界坐标
        Vector3[] path = agent.path.corners;
        Debug.Log("长度:"+ path.Length);
        //线段整体y轴加1个单位
        for (int i = 0; i < path.Length; i++)
        {
            path[i] = path[i] + new Vector3(0, 1, 0);
        }
        //设置定点的数量
        lineRenderer.positionCount = path.Length;
        for (int i = 0; i < path.Length; i++)
        {
            //设置线段的路径
            lineRenderer.SetPosition(i, path[i]);
        }
    }
}

你可能感兴趣的:(Unity游戏笔记)