u3D自动寻路1

  • 实例

我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去。角色会绕过各种复杂的障碍,找到一条理论上”最短路径“。

  • 步骤

1.创建地形
2.添加角色
3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。
4.选中地形,在Navigation窗口中,设置Navigation Static

5.依次选中障碍物,在avigation窗口中,设置Navigation Static
7.Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进程场景烘焙,就可以烘焙出寻路网格了
8.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent
9.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能

using UnityEngine;  
using System.Collections;  
  
//Author:ken@iamcoding.com  
public class PlayerController : MonoBehaviour  
{  
    private NavMeshAgent agent;  
  
  
    void Start()  
    {  
        //获取组件  
        agent = GetComponent<NavMeshAgent>();  
    }  
  
  
    void Update()  
    {  
        //鼠标左键点击  
        if (Input.GetMouseButtonDown(0))  
        {  
            //摄像机到点击位置的的射线  
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);  
            RaycastHit hit;  
            if (Physics.Raycast(ray, out hit))  
            {  
                //判断点击的是否地形  
                if (!hit.collider.name.Equals("Terrain"))  
                {  
                    return;  
                }  
                //点击位置坐标  
                Vector3 point = hit.point;  
                //转向  
                transform.LookAt(new Vector3(point.x, transform.position.y, point.z));  
                //设置寻路的目标点  
                agent.SetDestination(point);  
            }  
        }  
  
  
        //播放动画,判断是否到达了目的地,播放空闲或者跑步动画  
        if (agent.remainingDistance == 0)  
        {  
            animation.Play("idle");  
        }  
        else  
        {  
            animation.Play("run");  
        }  
          
    }  
}  
  • 相关知识
  • 1.角色身上的Nav Mesh Agent 组件
  1. Radius 半径: 代理的半径(仅用于寻路目的,可以跟实际对象的半径大小不一样,一般比实际对象的半径大)。
    Speed 速度: 代理可以周游世界,走向它的目的地的最大移动速度。
    Acceleration 加速度: 最大加速度。
    Angular Speed 角速度: 最高转速(度/秒)。
    Stopping distance 制动距离:制动距离。到目的地的距离小于这个值,代理减速。
    Auto Traverse OffMesh Link 自动遍历OffMesh链接:自动移动并关闭OffMeshLinks
    Auto Repath 自动重新寻路:如果现有的部分已失效,获得新的路径。
    Height 高度:代理的高度(用于调试图形)。
    Base offset 基本偏移:碰撞几何体相对于实际几何体垂直的偏移。
    Obstacle Avoidance Type 障碍躲避类型 :躲避的质量水平。
    NavMesh Walkable 导航网格行走:指定代理可以遍历的导航网格层类型。这个参数很有用,在接下来的实例中可以用到。
  2. 障碍物一定要有Mesh Render,用于烘焙寻路网格
原文地址:https://www.cnblogs.com/lichuangblog/p/6492692.html