Unity3D实现NavMesh导航网格寻路

NavMesh(导航网格)是3D游戏世界中用于动态物体实现自动寻路的技术。

NavMesh系统是人工智能的一种,它使用一个添加在游戏对象上或者作为游戏对象父物体的名为“导航网格代理”(NavMeshAgent)的组件来控制该游戏对象寻找能够通过的路径,并最终到达目的地。

自动寻路还可以实现绕过障碍、爬上与跳下障碍物、按类别寻找属于自己的道路、动态设置道路中的障碍等技术。

下面用一个简单的Demo来介绍NavMesh的应用:

1.在Scene场景中添加Cube设置场景,如图所示:

2.选择除了主角、目标以及摄像机、直线光以外的所有物体,在Inspector窗口的右上角勾选Static,成为静态物体,并设置成Navigation Static静态类型。

3.在主窗口中选择[Window]→[Navigation],打开Navigation窗口。该窗口用于生成路径寻找所需要的导航网格结构,代理将根据该导航网格进行寻路计算。确保勾选了“Navigation Static”。点击Bake进行烘培。

4.选择需要寻路的游戏对象,为它添加一个NavMeshAgent组件。

5.编写寻路代码,新建一个脚本:

//寻路网格导航
using UnityEngine;
using System.Collections;

public class DemoNavigation : MonoBehaviour
{
  private NavMeshAgent agent;     //导航代理
  public Transform TransHero;

  // Use this for initialization
  void Start()
  {
    agent = this.GetComponent<NavMeshAgent>();
    if (agent && TransHero)
    {
      agent.SetDestination(TransHero.transform.position);
    }
  }
}

运行结果:

这样就实现了NavMesh导航网格寻路。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity3D实现导航效果

    介绍: unity界面开发,会用到很多导航的按钮,他们是公共的,单击其中一个按钮,显示对应的界面. unity中,UGUI自带Toggle组件,NGUI也有Toggle复选框,都方便了开发者的开发.但是只有合适自己才是王道. 今天,就用普通的按钮组建,来编写自己的导航. 导航的组成: 总控制 按钮组 面板组 步骤: 编写脚本:<NavigationButton>  控制按钮的高亮,动画等. 编写脚本:<NavigationPanel>   控制面板的显示和关闭. 编写脚本:<

  • Unity3D实现NavMesh导航网格寻路

    NavMesh(导航网格)是3D游戏世界中用于动态物体实现自动寻路的技术. NavMesh系统是人工智能的一种,它使用一个添加在游戏对象上或者作为游戏对象父物体的名为"导航网格代理"(NavMeshAgent)的组件来控制该游戏对象寻找能够通过的路径,并最终到达目的地. 自动寻路还可以实现绕过障碍.爬上与跳下障碍物.按类别寻找属于自己的道路.动态设置道路中的障碍等技术. 下面用一个简单的Demo来介绍NavMesh的应用: 1.在Scene场景中添加Cube设置场景,如图所示: 2.选

  • unity自带寻路(导航)系统 Nav Mesh导航网格

    本文为大家分享了unity自带寻路(导航)系统的具体代码,供大家参考,具体内容如下 一.介绍 unity官方文档: 导航网格(即 Navigation Mesh,缩写为 NavMesh)是一种数据结构,用于描述游戏世界的可行走表面,并允许在游戏世界中寻找从一个可行走位置到另一个可行走位置的路径.该数据结构是从关卡几何体自动构建或烘焙的. 我们可以这么理解:它是unity官方自带的一种寻路系统.我们可以通过它来制作简单的寻路,比如可以制作点击某个位置,让角色自动的绕开障碍走到目标点的效果,比如可以

  • Unity3D动态生成平面网格

    在编写几何着色器的时候发现默认的Plane无法满足需求,并且顶点顺序未知,于是便写了一个网格生成代码,便于生成指定大小的Plane,且顶点顺序可控. 效果如下: 一个单元格由4个顶点,两个三角面组成. 四个顶点如下图 则生成面的顶点顺序为: 左上三角形:0 -> 1 -> 2 右下三角形:2 -> 3 -> 0 Unity中顺时针绘制为正面,逆时针绘制为反面. 实现脚本如下: //PlaneBuilder.cs using System.Collections; using Sys

  • Unity3D实现自动寻路

    Unity3D自动寻路,供大家参考,具体内容如下 1.首先在Unity3D创造中一个正方体,一个圆柱体和一个平面. 2.将正方体和平面设为静态(Static前的方格打勾) 3.在Window中打开AI进行导航网格烘培 4.在add component中添加Nav Mesh Agent(导航网格代理) 这里将Stopping Distance的值修改为0.5.如果使用默认值0,则最后圆柱体会与正方体重合在一起. 5.附加AI脚本给圆柱体 6.最终效果 Unity3D小白一枚,如有错误希望大佬们指正

  • Unity3D网格功能生成球体网格模型

    本文实例为大家分享了Unity3D网格功能生成球体网格模型的具体代码,供大家参考,具体内容如下 前面已经讲过怎样使用mesh生成一个自己的网格,那么本文将会讲述怎样将这个网格变换成自己想要的形状,比如一个球体. 我们需要知道一个从平面坐标到球体坐标的映射公式.假设平面坐标是(x,y),球体坐标是(x0,y0,z0),则 球体坐标(x0,y0,z0)可以通过以下代码得到,(x,y) 对应vertices[i].x和vertices[i].y. v.x = r * Mathf.Cos(vertice

  • Unity3D生成一段隧道网格的方法

    本文实例为大家分享了Unity3D生成一段隧道网格的具体代码,供大家参考,具体内容如下 一.需求 最近有一个需求,生成段隧道的骨架网格.目前想到的方法就是,获取隧道网格,通过一个算法分离内框和外框的点: 然后通过外框和内框上的点画线,可以通过深度优先搜索得到内外两个环的序列, 从而实现骨架网格 二.生成隧道算法 隧道由段圆弧和一条直线组成,所以算法如下: 1.取圆心为0,0,0,和圆上半径的向量 \underset{OB}{\rightarrow}  ,绕z轴,旋转向量\underset{OB}

  • Vue.js实现网格列表布局转换方法

    实现效果: 实现代码及注释: <!DOCTYPE html> <html> <head> <title>布局转换</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv=&quo

  • 详解jQuery移动页面开发中的ui-grid网格布局使用

    在移动设备上,屏幕宽度狭窄,因此通常不使用多栏布局,但是有时你可能需要将小的元素(如按钮或并排导航标签,例如)多列排列在一起.Jquery Mobile 框架提供了一种简单的方法构建基于css 的分栏布局,叫做ui-grid Jquery Mobile 提供有四个预设的布局,可以在任何情况下都需要列 两列(使用ui-grid-a类) 三列(使用ui-grid-b类) 四列(使用ui-grid-c类) 五列(使用ui-grid-d类) 网格是100%的宽度,完全看不见的(没有边界或背景)和没有ma

  • Unity3D实现简易五子棋源码

    本文实例为大家分享了Unity3d简易五子棋源码,供大家参考,具体内容如下 Unity3d部分 对C#源码进行了改写简化: using UnityEngine; using System.Collections; public class chess : MonoBehaviour { //四个锚点位置,用于计算棋子落点 public GameObject LeftTop; public GameObject RightTop; public GameObject LeftBottom; pub

随机推荐