许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  【Unity3D】分离路面导航

【Unity3D】分离路面导航

阅读数 4
点赞 0
article_banner

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

  1. using UnityEngine;
  2. using UnityEngine.AI;
  3. public class NavigationController : MonoBehaviour {
  4. private NavMeshAgent navMeshAgent;
  5. private Transform target;
  6. private void Awake() {
  7. navMeshAgent = GetComponent<NavMeshAgent>();
  8. target = GameObject.Find("Target").transform;
  9. }
  10. private void Update() {
  11. navMeshAgent.SetDestination(target.position);
  12. }
  13. }
cs
运行

        说明: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)运行效果 


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空