Unity3D AI:导航系统-导航网格生成

导航系统又称寻路系统,在siki学院的视频教程中,我们将通过介绍内置的导航系统来深入学习Unity3D的人工智能。我将展示如何在场景找到最短的路径以及避开障碍。
第一步:要对场景进行网格烘焙。选择window-Navigation

NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路。。导航时,只需要给导航物体挂载导航组建,导航物体便会自行根据目标点来寻找最直接的路线,并沿着该线路到达目标点。

下面通过一个简单的案例来介绍NavMesh的应用:

并在Inspector面板中选中为静态(static)下拉选项的Navigation Static,如下图。

2.依次选择 Navigation-Bake ,打开后面板如下。

单击该面板右下角的Bake按钮,即可生成导航网格,蓝色为可行走区域。
(如何不想烘培石头上方为可行走可以在Object中选择Not walk able)

3.下面就可以让一个运动体根据一个导航网格运动到目标位置。

把游戏人物创建一个capsule(胶囊)运动体,为该胶囊挂在一个Nav Mesh Agent(Component - Navigation - Nav Mesh Agent);最后写一个脚本就可以实现自动寻路了。脚本如下:

using UnityEngine.AI;

public class Hero:MonoBehaviour{

public NavMeshAgent agent;

void Update(){
if(Input.GetMouseButtonDown(0)){
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit)){
agent.SetDestination(hit.point);
}
}
}
}

脚本新建完成后挂载到胶囊体上,然后点击鼠标在场景内就能到达目标位置了。

这样一个简单的自动寻路就完成了,如果要更精细的寻路,或要实现上坡,钻"桥洞"等,可根据下面介绍的相关参数进行调节。

下面介绍 Navigation 组件和 Nav Mesh Agent 组件的相关参数。
Navigation

Object:物体参数面板
Navigation Static:勾选后表示该对象参与导航网格的烘培。
OffMeshLink Generation:勾选后可跳跃(Jump)导航网格和下落(Drop)。
Bake:烘培参数面板
Radius:具有代表性的物体半径,半径越小生成的网格面积越大。
Height:具有代表性的物体的高度。
Max Slope:斜坡的坡度。
Ste Height:台阶高度。
Drop Height:允许最大的下落距离。
Jump Distance:允许最大的跳跃距离。
Min Region Area:网格面积小于该值则不生成导航网格。
Width Inaccuracy:允许最大宽度的误差。
Height Inaccuracy:允许最大高度的误差。
Height Mesh:勾选后会保存高度信息,同时会消耗一些性能和存储空间。
Nav Mesh Agent:导航组建参数面板

Radius:物体的半径
Speed:物体的行进最大速度
Acceleration:物体的行进加速度
Augular Speed:行进过程中转向时的角速度。
Stopping Distance:离目标距离还有多远时停止。
Auto Traverse Off Mesh Link:是否采用默认方式度过链接路径。
Auto Repath:在行进某些原因中断后是否重新开始寻路。
Height:物体的高度。
Base Offset:碰撞模型和实体模型之间的垂直偏移量。
Obstacle Avoidance Type:障碍躲避的的表现登记,None选项为不躲避障碍,另外等级越高,躲避效果越好,同时消耗的性能越多。
Avoidance Priority:躲避优先级。
NavMesh Walkable:该物体可以行进的网格层掩码。

原文地址:https://www.cnblogs.com/dingsiki/p/10001817.html

时间: 2024-11-09 06:02:08

Unity3D AI:导航系统-导航网格生成的相关文章

unity3d AI's sight

just finished -----by wolf96 unity3d AI's sight

Unity3D引擎扩展中的编辑器定制方法

http://gamerboom.com/archives/36432 作者:Richard Fine Unity3D的方便之处在于,它很容易地扩展编辑器套件.每款游戏都对加工有着不同的需求,可以快速地以完全集成的方法来构建这些内容并极大地提升开发速度. 目前有大量复杂的软件包提供以基本Unity功能套件为基础的复杂工具,从视觉脚本编辑器到编辑器内导航网格生成.但是,有关如何自行构建此类事物的程序说明却很少.我将在下文列举某些在自己的工作中总结的编辑器定制相关信息. Unity-Window(f

(转)Unity3d UnityEditor编辑器定制和开发插件

在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码.[MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过S

【转载】Unity3d UnityEditor编辑器定制和开发插件

在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码.[MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过S

【Unity】12.2 导航网格寻路简单示例

开发环境:Win10.Unity5.3.4.C#.VS2015 创建日期:2016-05-09 一.简介 本节通过一个简单例子,演示如何利用静态对象实现导航网格,并让某个动态物体利用导航网格自动寻路,最终找到目标. 二.设计步骤 1.添加3个Cube 启动Unity应用程序打开ch1201_Navmesh_Sample工程,新建一个名为Demo1-1.unity的场景,然后在场景中创建3个Cube,如下图所示: 2.生成导航网格 (1)将3个Cube全变为Static 分别选中游戏场景中的3个C

如何让编辑器运行你的代码

如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码. [MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过Selection类),并据此来确定显示视图.与此类似,[ContextMenu("XXX")

【Unity】12.1 基本概念

开发环境:Win10.Unity5.3.4.C#.VS2015 创建日期:2016-05-09 一.简介 导航网格(Navmesh)是世界坐标系中几何体的简化表示,被游戏代理用来进行全局导航.通常,代理有一个目标或一个目的地,它试图找到通往该目标或目的地的路径,然后沿着该路径导航到该目标,这个过程称为寻路(Path Finding). 注意,导航网格生成(或烘培)通常由游戏开发者在编辑器内完成,而寻路通常由代理在运行时根据该导航网格来完成. 在复杂的游戏世界中,可以有许多代理和动态障碍物,由于这

重力感应游戏可行性办法研究_完结

重力感应游戏可行性办法研究 一.手机中的重力感应组件 很多人都知道手机有重力感应这个功能,但是重力感应具体是什么,却并不是很了解.重力感应组件不是摄像头,人们知道有多少万像素,不是触摸屏,人们了解是电容屏还是电阻屏,重力感应就像笼罩着迷雾的山谷,让人难以一探究竟.下文将对重力感应组件进行详细描述. 组件1:加速计 要了解加速计,首先得了解加速计是什么.实质上加速计就是用来检测手机受到的加速度的大小和方向的电子元件,而手机静置的时候是只受到重力加速度的 .所以很多人把加速计功能又叫做重力感应功能.

创建吸引访问者的网站内容的14种方法

上网冲浪时,武汉ui培训机构小编经常看到某些网站放满了漂亮图片,企图吸引人们的注意.当然,网站使用图标在是为了用户方便,但是如果我没法马上发现想找的相关内容,我就会点击别处另寻所需了.你的网站内容应该既能吸引访问者又能吸引搜索引擎. 14 ways to add content to your web site and attract visitors 使你的网站内容吸引访问者的14种方法 1. Get into the mind of your visitor. Brainstorm all