Unity 寻路并显示预行走路线

这篇博客介绍了如何在Unity中利用内置的NavMesh进行网格寻路,并结合LineRenderer显示预行走路线。通过监听鼠标点击,设置目标点,NavMeshAgent负责角色移动,同时当路径点数大于1时,使用LineRenderer绘制路径。此外,还提到动态创建障碍物并让角色避开的方法,即在物体上添加NavMeshObstacle组件并勾选Carve选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 先看下面的演示效果: 



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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值