Unity-BattleStar丨拓展:Unity实现自动寻路划线

2024-08-14 16:41:32 浏览数 (2)

效果展示:

思路:

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);
        }
    }
}

0 人点赞