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().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 启用此属性后,只有在静止状态时才会雕刻障碍物。请参阅下面的移动的导航网格障碍物的逻辑以了解更多信息。

你可能感兴趣的:(Unity Navigation系列一 静态导航)