1 导航系统简介

导航系统用于智能避障并寻找目标物体,如:王者荣耀中,当玩家跑到敌方塔的攻击范围内,敌方塔就会发射火团攻击玩家,当玩家逃跑时,火团会智能跟随玩家,其中智能跟随就使用到了导航系统。

1)导航系统使用流程

  • 将地面、路障等静态对象的 Static 属性设置为 Navigation Static;
  • 在 Navigation 窗口烘焙(Bake)导航网格;
  • 给导航角色添加 NavMeshAgent 组件;
  • 给导航角色添加脚本组件,并在脚本组件中设置导航目标位置(navMeshAgent.SetDestination)。

2)烘焙导航网格面板属性

依次选择【Window→Navigation】打开导航窗口,再选择 Bake 选项卡,烘焙导航网格面板属性如下:

  • Agent Radius:角色半径
  • Agent Height:角色高度
  • Max Slope:角色能爬的最大坡度
  • Step Height:角色爬台阶时每步能跨的最大高度

3)NavMeshAgent 组件面板属性

  • Base Offset:导航角色与网格中心的偏移量
  • Speed:导航过程中最大速度
  • Angular Speed:拐弯时角速度
  • Acceleration:加速度
  • Stopping Distance:离目标多远停下
  • Auto Braking:当角色快达到目标时,自动减速
  • Radius:导航角色半径
  • Height:导航角色高度
  • Quality:导航质量,质量越高,导航算法越优,导航路径越短
  • Priority:导航角色优先级(多个导航角色过独木桥时,谁先过)
  • Auto Traverse Off Mesh Link:自动跨越分离路面
  • Auto Repath:自动重新规划路径
  • Area Mask:分层剔除,设置导航角色可以走哪些层

4)NavMeshAgent 组件常用属性和方法

// 设置导航目标
public bool SetDestination(Vector3 target)
// 停止导航(过时)
public void Stop()
// 恢复导航(过时)
public void Resume()
// 计算到指定位置的导航路径,如果路径不存在,返回false,说明通过导航不能到达该位置
// 如果路径存在,path里会存储到指定位置的所有拐点信息,获取拐点:Vector3[] corners = path.corners
public bool CalculatePath(Vector3 targetPosition, NavMeshPath path)
// 完成分离路面导航,继续走剩下的路
public void CompleteOffMeshLink()// 停止还是恢复
isStopped
// 期望导航速度
desiredVelocity
// 当前导航速度
velocity
// 停止距离,距离目标多远时停下来
stoppingDistance
// 导航剩余距离
remainingDistance
// 通过导航更新位置
updatePosition
// 通过导航更新旋转
updateRotation
// 分层剔除,设置导航角色可以走哪些层,int类型(32位),-1表示全选,2^n表示只选第n层(n从0开始)
areaMask
// 角色当前是否正处于分离路面导航状态
isOnOffMeshLink
// 当前分离路面连接数据,包含startPos、endPos、activated、linkType等属性
currentOffMeshLinkData

2 应用

1)游戏界面

2)设置 Navigation Static

选中地面、斜坡、台阶、路障等静态对象,将 Static 属性设置为 Navigation Static,如下:

3)烘焙导航网格

依次选择【Window→Navigation】打开导航窗口,再选择 Bake 选项卡,设置 Max Slope、Step Height 属性分别为 45、1.1,如下:

点击 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);}
}

说明:NavigationController 脚本组件挂在胶囊体上。

TargetController.cs

using UnityEngine;public class TargetController : MonoBehaviour {private CharacterController character;private float speedRate = 4f;private void Awake() {character = GetComponent<CharacterController>();}private void Update () {float hor = Input.GetAxis("Horizontal");float ver = Input.GetAxis("Vertical");Vector3 speed = new Vector3(hor, 0, ver) * speedRate;character.SimpleMove(speed);}
}

说明:TargetController 脚本组件挂在球体上,并且球体上需要挂载 CharacterController 组件,其 Slope Limit、Step Offset 属性分别设置为 45、1.1。

6)运行效果

【Unity3D】导航系统相关推荐

  1. 【Unity3D基础2-8】Unity3D导航系统的使用

    一.引言 目录:[Unity3D从入门到进阶]文章目录及设置这个专栏的初衷 二.导航系统面板 Agents模块: Name:设置烘培Agents的名字 Radius:烘培的半径,也就是物体的烘培

  2. Unity3D导航系统中物体无法移动

    思路 官方文档: 问题 object追逐target时,object无法移动: 解决 文档demo_navi.cs脚本代码错误: 此处应为 !=

  3. 【Unity3D从入门到进阶】专栏文章导读清单

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 一.目录 Unity3D精品系列教程 一.C#基础 [C#基础1-1]C#简 ...

  4. Unity3D如何快速入门?

    一句话说明下Unity是什么,Unity是一个开发游戏,主要用于手机游戏开发的引擎,什么是引擎,引擎就是工具的意思. 想学习一门课程,最有效直接的方法是什么?从网上找各种相关资料,最后你会发现看了很多 ...

  5. Unity新手入门必备书籍和教程推荐

    纵观整个游戏市场,Unity3D游戏开发已经称霸当下,Unity3D是一款3D游戏引擎,提供了3D游戏的大部分基础功能实现,比如物理碰撞.3D模型显示.光照等功能.市面上有超过一半以上的游戏,都是利用 ...

  6. [Unity3D]Navigation导航系统讲解及其应用

    目录 序言 一.Navigation的基础介绍 二.场景搭建 三.场景烘焙搭建 四.物体Nav Mesh Agent说明 五.Nav Mesh Areas 与 Agents 六.Off Mesh Li ...

  7. Unity3D之Navigation导航系统学习及案例讲解(适合初学者)

    引言:很多游戏都有自动寻路功能,点击场景中的一个位置,角色会自动选择一条相对较优的路线过去.大多数端游页游都会使用A*寻路算法,小生之前也总结过,刚兴趣的可以学习一下.现在学习的是Unity内置的导航 ...

  8. unity3d横版游戏移动_制作游戏并不困难。 回顾Unity3D上的小型移动项目

    unity3d横版游戏移动 Clearly, I'm telling about my experience and my vision, but many things would be commo ...

  9. Unity3d学习日记 (2)C#脚本编写优化以及全自动敌人脚本实现实战

    需求分析 需要编写脚本控制敌人的行为,完成包括巡逻.射击.追击.逃跑四个功能 解决思路 考虑机器人的行为受一个决策树的影响,编写有限状态自动机形成决策树,通过条件分支语句来对机器人的行为进行限制和控制 ...

  10. 【Unity3D插件】uMOBA插件分享《Moba类游戏框架插件》

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 一.前言 今天介绍一款MOBA游戏的插件,已经有一个雏形了,可以作为开发的模 ...

最新文章

  1. volatile关键字对
  2. Linux 下安装redis
  3. 【2006-4】【木偶玩具】
  4. 1.7 理解 Dropout-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. python sympy安装_SymPy (A) 环境搭建与简介
  6. Linux多进程的应用
  7. can总线报文是固定的吗_CAN总线负载率的计算方式
  8. 阿里云发布ET奥运大脑,推进奥运进入数字时代
  9. jsp中文乱码现象解决办法
  10. xposed+justTrustMe在逍遥模拟器上的安装配置
  11. ios正式包ipa,发布苹果应用商店App Store
  12. HiWork告诉你:拿什么来拯救你,我的时间
  13. 菜鸟的AI安全乱谈(2)—通过模型再训练留后门
  14. linux下google浏览器字体不清晰,google浏览器的字体模糊的原因是什么_怎么解决 - 驱动管家...
  15. 【编程】工具 - Compuware 全套产品的许可文件(License.xml)
  16. 编写一个程序,分别使用字节流和字符流拷贝一个文本文件
  17. GitHub小工具制hackbar2.1.3
  18. 科技论文的图题翻译,图例,图坐标轴
  19. java.lang.NoSuchMethodError:scala.collection.immutable.HashSet$.empty()Lscala/collection/
  20. 八个黑客常用的渗透工具

热门文章

  1. 眼睛又干又痒,到底是干眼症还是结膜炎?
  2. 高中数学排列组合公式/排列组合计算公式
  3. centos7下安装airflow
  4. PR预设:100种缩放旋转移动摇晃变形分割转场预设Transitions Pro for win/Mac​
  5. mysql中括号_如何快速学习mySQL数据库常规通配符及运算符的用法?
  6. python中db是什么意思_Python3爬虫中MongoDB的存储操作是什么
  7. 没有事业的女孩子很悲惨 - - - 一位老总的话!
  8. 欧洲计算机专业排名,最新!2021年QS世界大学学科排名发布!欧洲各国各学科专业排名表现抢眼!...
  9. 抽象代数 04.02 群在集合上的作用
  10. 2-4 CAD基础 修剪(trim)