Unity自动寻路入门指南

Unity自动寻路指南

主要参考Naviation这个文档。本文不关注自动寻路的原理,如有需要可以在这里查看nav-InnerWorkings

一些名词

  • Agent:绑定在人物身上的,用于实现自动寻路的,看上去就像一个collision。
  • NavMesh:Agent可以在NavMesh在行走。
  • Off-Mesh Link:相当于传送门。
  • NavMesh Obstacle:障碍物。

创建NavMesh

标记为Navigation Static

所有用于成为NavMesh的网格都必须被指定为Navigation Static。 方法如下,选中GameObject,然后在菜单栏的[Window]-[Navigation]-[Object]-勾选即可。

烘培Bake

点击Bake开始烘培,其中的属性说明如下,可以参照这个图

  • Agent Radius:Agent的中心可以离障碍物有多近。
  • Agent Height:Agent可以通过的最矮高度。
  • Max Slope:Agent可以爬上的最高坡度。
  • Step Height:Agent每次可以上的最高高度(相当于一节楼梯的高度)。

一般来说,到这里设置完就可以点击Bake了,如果需要高级设置(设置体元和一些孤立的表面),参考这里nav-AdvancedSettings。 bake成功以后,选择的mesh表面就会像上面一样变成蓝色。 到这里NavMesh就设置完毕了。

NavMesh Agent设置和脚本编写

很简单,Agent Size设置可以在Scene面板中实时看到。

  • Speed:Agent所能达到的最大速度。
  • Angular Speed:最大的转向速度,不是人物的转向,是Agent需要拐弯的时候的最大的转向速度,如果这个过低,将会产生螺旋线路效果。
  • Acceleration:Agent到达Speed过程中的加速度,越大越快抵达Speed。
  • Stopping Distance:距离目的地多少远的距离停下。
  • Auto Braking:在终点是否自动停下,如果不勾选这个,Agent将会在终点绕终点做谐振。
  • Priority:多个Agents同时存在时,权重高的将会被忽略,权重取值范围从0到99,0是最重要,默认为50。
  • Auto Traverse OffMeshLink:到达Off-Mesh Link的位置是否自动触发传送。 设置完以上步骤后,只需以下代码,Agent就会移动到指定位置。
    // MoveTo.cs
    using UnityEngine;
    using System.Collections;
    
    public class MoveTo : MonoBehaviour {
       
       public Transform goal;
       
       void Start () {
          NavMeshAgent agent = GetComponent<NavMeshAgent>();
          agent.destination = goal.position; 
       }
    }

结合人物动画

官方的nav-CreateNavMeshAgent这个DEMO很简单,主要就是通过agent完成寻路,同时控制AnimationController。 关于更完美的例子可以查看StandardAsset Example中的CharacterThirdPersonAI,结合了第三人称人物动画控制器ThirdPersonAnimationController和第三人称人物控制器ThirdCharacterController完成了带walk和run的自动寻路。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华章科技

升值加薪Excel神助攻,数据透视表堪称神器!

VLOOKUP、数据透视表、条件格式…你用这几个技巧做,80%的工作需求都能解决。今天特意整理了这些操作技巧,拯救同在“表海”中挣扎的你,让你的工作效率超乎想...

1062
来自专栏机器学习养成记

R语言爬虫与文本分析

之前用python做过简单的爬虫与分析,今天尝试一下用R完成相应的功能。首先用R爬取了《了不起的麦瑟尔夫人》豆瓣短评作为语料,然后进行了词云绘制、关键词提取的基...

46314
来自专栏hightopo

原 荐 快速开发 HTML5 WebGL 的

9103
来自专栏HT

基于 HTML5 WebGL 的 3D 网络拓扑图

  在数据量很大的2D 场景下,要找到具体的模型比较困难,并且只能显示出模型的的某一部分,显示也不够直观,这种时候能快速搭建出 3D 场景就有很大需求了。但是搭...

3295
来自专栏章鱼的慢慢技术路

CodeCombat森林关卡Python代码

2143
来自专栏数据小魔方

绩效管理工具(一)——仪表盘风格图表!

今天教大家制作用于绩效管理的仪表盘风格图表! ▽ 看惯了普通的图表,偶尔换换口味,用类似汽车仪表盘(量表)风格的图表来展示数据,也能起到新人瞩目,令人印象深刻的...

3825
来自专栏机器人网

电气设备中的颜色都代表什么?

一、依导线颜色标志电路时 1、黑色 装置和设备的内部布线。 2、棕色 直流电路的正极。 3、红色 三相电路和C相; 半导体三极管的集电极; 半导体二极管...

3136
来自专栏Android干货

环信easeui集成:坑总结2018(二)

环信EaseUI 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改。

1072
来自专栏walterlv - 吕毅的博客

如何精准地用打印机在贺卡或邀请函上打字

2018-08-26 07:35

2.9K1
来自专栏阮一峰的网络日志

关于Lorem ipsum

Wikipedia上的解释是,这只是一段用来测试排版效果的占位文字,没有实际的含义。据说,16世纪的时候就有人开始用了。当时的某个印刷工人,从古罗马政治家西塞罗...

1721

扫码关注云+社区

领取腾讯云代金券