美文网首页Unity3D
【Unity3D】分离路面导航

【Unity3D】分离路面导航

作者: LittleFatSheep | 来源:发表于2023-03-04 11:08 被阅读0次

1 前言

导航系统中介绍了导航的基本用法,但是不能解决分离路面导航问题。如下图,胶囊体需要导航到立方体位置,但是路面不连续,烘焙(Bake)导航网格后,断开处也没有导航网格,因此,胶囊体导航到分离路面边界处就会停下来。

角色在分离路面边界处,存在两种行为:1. 水平跳,2. 往下跳或往上跳。Unity3D 针对这两种情况提供了对应的解决方案:

  • 水平跳:给分离路面对象勾选 Generate OffMeshLinks 属性;
  • 往下跳或往上跳:在路面分离处创建 2 个空对象作为跳跃点,给一个跳跃点添加 OffMeshLink 组件,并将 2 个跳跃点对象拖拽到 OffMeshLink 组件中。

说明:水平跳场景下,也可以使用添加 OffMeshLink 组件方式;往下跳或往上跳场景下,不能使用勾选 Generate OffMeshLinks 属性方式。

2 通过 Generate OffMeshLinks 实现分离路面导航

1)游戏界面

2)设置 Navigation Static、Generate OffMeshLinks

依次选择【Window→Navigation】打开导航窗口,再选择 Object 选项卡,选中两个地面,勾选 Navigation Static、Generate OffMeshLinks,如下:

3)烘焙导航网格

切换到 Bake 选项卡,设置 Max Slope、Step Height、Drop Height、Jump Distance 属性如下:

点击 Bake 烘焙导航网格,导航网格显示如下:

其中,浅蓝色表示导航可以走的区域,中间的连接线表示导航跨越线。

4)添加 NavMeshAgent 组件

给胶囊体添加 NavMeshAgent 组件。

5)添加脚本组件

NavigationController.cs

using UnityEngine;
using UnityEngine.AI;
 
public class NavigationController : MonoBehaviour {
    private NavMeshAgent navMeshAgent;
    private Transform target;
 
    private void Awake() {
        navMeshAgent = GetComponent<NavMeshAgent>();
        target = GameObject.Find("Target").transform;
    }
 
    private void Update() {
        navMeshAgent.SetDestination(target.position);
    }
}

说明:Target 是小立方体, NavigationController 脚本组件挂在胶囊体上。

6)运行效果

3 通过 OffMeshLink 组件实现分离路面导航

在分离路面边界处往下或往上跳的场景,使用 Generate OffMeshLinks 方法,在边界处仍然无法烘焙出导航连接线,此时需要使用到 OffMeshLink 组件。

1)游戏界面

2)设置 Navigation Static

依次选择【Window→Navigation】打开导航窗口,再选择 Object 选项卡,选中两个地面,勾选 Navigation Static,如下:

3)添加 OffMeshLink 组件

在分离路面边界处创建 2 个空对象,并重命名为 Start、End,给 Start 添加 OffMeshLink 组件,并将 Start、End 拖拽到 OffMeshLink 组件中,如下:

补充:由于空对象不可见,为方便调整空对象位置,可在 Inspector 窗口给空对象设置 Icon。

4)烘焙导航网格

Navigation 窗口切换到 Bake 选项卡,点击 Bake 烘焙导航网格,可以看到 2 个空对象之间有一条连接线。

5)添加 NavMeshAgent 组件和脚本组件

同第 2 节。

6)运行效果

声明:本文转自【Unity3D】分离路面导航

相关文章

  • 横向滑动懒加载效果+升级版

    一.基础版本 导航条置顶样式 这里导航条和内容列表是分离的,所以在UI处理上也可以分离,只要实现懒加载效果就行。思...

  • unity 面试 准备

    unity相关 先上参考帖Unity3D :关于UGUI的网格重建、动静分离 关于Unity中的UGUI优化,你可...

  • IsaacSim Unity3D - 工具类

    工具类 本节概述了IsaacSim Unity3D中可用的工具。 地图生成 艾萨克(Isaac)导航堆栈需要2D占...

  • 2018-10-13

    国庆节去旅游,设置好目的地跟随导航的指引出发。当道路越来越窄,路面越来越差,我怀疑走错路了,可是导航还是提示这...

  • 5.10导航系统

    Nav Mesh Agent 自动寻路(添加在移动的物体上) Off Mesh Link分离路面(添加在跳跃的起始...

  • Unity3d 入门(一):了解Unity3d

    1.了解unity3d 首先我们要对unity3d有一个了解,什么是unity3d?为什么使用unity3d?其实...

  • 路面

    走在坑坑洼洼的路面上 碎石零散地贴着地底里 公交车在旁边驶过 承载着归途的梦想 一颗颗粒子铺满了道路 供人们前行 ...

  • unity3d uGUI sprite通道分离

    前言:

  • unity3d优化总结篇

    unity3d优化总结篇(一)unity3d优化总结篇(二)

  • Thinking in Unity3D:材质系统概览

    关于《Thinking in Unity3D》 笔者在研究和使用Unity3D的过程中,获得了一些Unity3D方...

网友评论

    本文标题:【Unity3D】分离路面导航

    本文链接:https://www.haomeiwen.com/subject/bipohdtx.html