Unity Navigation系列一 静态导航

参考
【Unity3D】自动寻路系统Navigation实现人物上楼梯、走斜坡、攀爬、跳跃

一、静态导航示例

参考
[原]Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)

1.使用3个Cube摆出如下形状,并修改为Navigation Static
image.png

image.png
2.打开Navigation窗口
image.png
image.png
image.png

注意这里的Agent Radius改为0.1至0.4之间都可以,点击Bake才能烘焙出来斜坡的路径。原因是我们这个斜板,宽度只有1,默认的Agent Radius是0.5,正好宽度不足。


Agent Radius(物体的半径)物体半径越小,生成网格面积越大
3.添加一个cube作为目标,一个胶囊作为要导航的角色
image.png
4.为胶囊添加Nav Mesh Agent,再添加如下脚本,指定TargetObject 后即可运行

https://docs.unity.cn/cn/2019.4/Manual/nav-CreateNavMeshAgent.html

using UnityEngine;
using UnityEngine.AI;

public class Run : MonoBehaviour
{
    public Transform TargetObject = null;

    void Start()
    {
        if (TargetObject != null)
        {
            GetComponent<NavMeshAgent>().destination = TargetObject.position;
        }
    }
}
大致运行路径
二、Bake参数

参考unity5之导航网格寻路系统-1Bake(烘培)

1.Agent Radius上面已经说过了
2.Agent Height:物体的高度
image.png

在上面的例子基础上,我把胶囊变矮,然后做了一个桥洞。为了更容易观察,把这些积木都换了material。可以看到,胶囊是可以从桥洞下面穿过去的,但是bake路径却没有在桥洞里生成蓝色区域。

这是因为我们指定的Agent Height是默认值2,把它改成0.3,重新bake即可。


image.png

报错了,先改成0.5吧


image.png

现在桥下面生成了路径,运行后,可以看到胶囊从桥洞中穿过。
3.Max Slope 斜坡斜度(最大60°),如果大于设定值就不会生成网格

这个很容易理解,如果改成2度,再Bake就能看到绿色的斜板不会生成路径。

4.Step Height 台阶高度

上面的报错,意思就是台阶高度不能大于人的高度。


image.png
image.png
5.Drop Height 允许的最大下落距离
image.png

勾选斜板的Object》Generate OffMeshLinks,重新Bake后,能看到跳下来的标识。

6.Jump Distance 允许的最大跳跃距离

注意Jump Distance和Drop Height 都可以选择开启,即哪个物体需要开启,就勾选相应的Object》Generate OffMeshLinks。

image.png

如图的箭头,胶囊体如果不走斜坡,想直接跳过去,直接改Jump Distance后再Bake是无效的,需要将棕色起跳点的物体勾选Object》Generate OffMeshLinks后,重新Bake。


现在就能跳过去了
7.Advanced
image.png
  • Manual Voxel Size 选中手动输入像素值
  • Voxel Size 自动获取像素值为Agent Radius的1/3。
  • Min Region Area 网格面积小于这个值,不会生成。
  • Height Mesh 选中会自动保存高度信息,会增加性能和存储空间的消耗。
8.创建网格外链接

上面打勾的方式,称为自动构建网格外链接,可参考官方文档:https://docs.unity.cn/cn/2019.4/Manual/nav-BuildingOffMeshLinksAutomatically.html

另外,也可以通过 Off Mesh Link创建,参考https://docs.unity.cn/cn/2019.4/Manual/nav-CreateOffMeshLink.html

image.png

  • 首先创建两个圆柱体:_Game Object > 3D Object > Cylinder
  • 可将圆柱体的比例设置为 (0.1, 0.5, 0.1)_ 以便于使用它们。
  • 将第一个圆柱体移动到上层平台的边缘,靠近导航网格表面。
  • 将第二个圆柱体放在地面上,靠近导航网格,在链接应着陆的位置。
  • 选择左侧的圆柱体,并为其添加网格外链接组件。从 Inspector 中选择 Add Component,然后选择 Navigation > Off Mesh Link。
  • 在 Start 字段中分配最左侧的圆柱体,并在 End 字段中分配最右侧的圆柱体。

现在设置好了能正常运行的网格外链接!如果通过网格外链接的路径短于沿导航网格行走的路径,则将使用网格外链接。

可使用场景中的任何游戏对象来容纳网格外链接组件,例如,围栏预制件可包含网格外链接组件。同样,可使用任何以变换作为开始和结束标记的游戏对象。

三、NavMeshAgent

https://docs.unity.cn/cn/2019.4/Manual/class-NavMeshAgent.html

  • Radius 代理的半径,用于计算障碍物与其他代理之间的碰撞。
  • Height 代理通过头顶障碍物时所需的高度间隙。
  • Base offset 碰撞圆柱体相对于变换轴心点的偏移。
  • Speed 最大移动速度(以世界单位/秒表示)。
  • Angular Speed 最大旋转速度(度/秒)。
  • Acceleration 最大加速度(以世界单位/平方秒表示)。
  • Stopping distance 当靠近目标位置的距离达到此值时,代理将停止。
  • Auto Braking 启用此属性后,代理在到达目标时将减速。对于巡逻等行为(这种情况下,代理应在多个点之间平滑移动)应禁用此属性
  • Quality 障碍躲避质量。如果拥有大量代理,则可以通过降低障碍躲避质量来节省 CPU 时间。如果将躲避设置为无,则只会解析碰撞,而不会尝试主动躲避其他代理和障碍物。
  • Priority 执行避障时,此代理将忽略优先级较低的代理。该值应在 0–99 范围内,其中较低的数字表示较高的优先级。
  • Auto Traverse OffMesh Link 设置为 true 可自动遍历网格外链接 (Off-Mesh Link)。如果要使用动画或某种特定方式遍历网格外链接,则应关闭此功能。
  • Auto Repath 启用此属性后,代理将在到达部分路径末尾时尝试再次寻路。当没有到达目标的路径时,将生成一条部分路径通向与目标最近的可达位置。
  • Area Mask 描述了代理在寻路时将考虑的区域类型。在准备网格进行导航网格烘焙时,可设置每个网格区域类型。例如,可将楼梯标记为特殊区域类型,并禁止某些角色类型使用楼梯。
1.Area Mask
image.png
image.png

这个是可以设置自动寻路烘培的层,配合Nav Mesh Agents使用。

四、导航网格障碍物 (Nav Mesh Obstacle)

https://docs.unity3d.com/cn/current/Manual/class-NavMeshObstacle.html

image.png

  • Shape 障碍物几何体的形状。选择最适合对象形状的选项。
  • Carve 勾选 Carve 复选框后,导航网格障碍物会在导航网格中创建一个孔。
    • Move Threshold 当导航网格障碍物的移动距离超过 Move Threshold 设置的值时,Unity 会将其视为移动状态。使用此属性可设置该阈值距离来更新移动的雕孔。
    • Time To Stationary 将障碍物视为静止状态所需等候的时间(以秒为单位)。
    • Carve Only Stationary 启用此属性后,只有在静止状态时才会雕刻障碍物。请参阅下面的移动的导航网格障碍物的逻辑以了解更多信息。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,326评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,228评论 1 304
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,979评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,489评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,894评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,900评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,075评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,803评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,565评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,778评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,255评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,582评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,254评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,151评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,952评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,035评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,839评论 2 277

推荐阅读更多精彩内容

  • 前言:在游戏中经常出现怪物自己会走路,人物跟随鼠标点击位置进行移动,那么这些功能是怎么实现的呢?通过本节内容的学习...
    Joe_Game阅读 6,153评论 0 3
  • 1.打开寻路设置窗口 Window -> Navigation 2. 建立地形,生成寻路网格 Create Pla...
    困卡阅读 1,312评论 1 3
  • 一、Unity简介 1. Unity界面 Shift + Space : 放大界面 Scene界面按钮渲染模式2D...
    MYves阅读 8,067评论 0 22
  • 导航系统 CharacterController -角色控制器 理解角色控制器:当游戏角色跑到了60公里每小时的速...
    元宇宙协会阅读 4,479评论 0 2
  • 一、描述:一个角色在特定环境下自动到达指定目标。导航网格(NavMesh)1、设置导航静态物体(Navigatio...
    斗魁阅读 679评论 0 0