基于unity引擎的开发进阶之 导航系统

在游戏中常常有根据目标位置自动生成路线并自动寻路的功能,在3d导航中我们需要根据目的地生成到达目的地的可行路径。
Unity的Navigation导航功能通过设置平面、障碍物、循迹主体三种标签,自动生成可Nav Mesh导航网格
,给物体添加导航代理组件后,物体会根据目标位置和导航网格,寻找合适的路线,沿着该路线移动到目标位置,如果障碍物是移动的可以给障碍物添加NavMesh Obstacle导航网格障碍物组件,该组件可用于描述代理在世界中导航时应避开的移动障碍物。由物理系统控制的木桶或板条箱便是障碍物的典型例子。障碍物正在移动时,代理将尽力避开它,障碍物一旦变为静止涨停,便会在导航网格中雕刻一个孔,从而使代理能够改变自己的路径来绕过它,或者如果静止的障碍物阻挡了路径,则代理可寻找其他不同的路线。
###生成导航网格
1、标记用于生成导航网格的物体;
2、在Navigation视图中点击bake按钮生成导航网格

###为动态物体添加动态导航代理组件
选择需要导航的对象,点击Component-Navigation-Nav Mesh Agent


下面我们给球添加一个脚本,通过脚本可以将角色发送到另一个游戏对象指定的目标

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class AutoStart:MonoBehaviour
{public Transform target;protected UnityEngine.AI.NavMeshAgent agent;   void Start(){//获取游戏对象的导航组件agent = GetComponent<UnityEngine.AI.NavMeshAgent>();}void Update(){//检测用户鼠标点击if(Input.GetButtonDown("Fire1"))SetDestination();}//设置导航目的地protected void SetDestination(){//鼠标点击的位置,并用target标记目标位置var ray = Camera.main.ScreenPointToRay(Input.mousePosition);if(Physics.Raycast(ray,out hit)){target.position = hit.point;agent.destination = target.position;}}}

总而言之,我们需要对取得导航网格代理组件的引用,然后为了将代理设置为运动状态,只需要将一个位置分配给其destination属性。、
导航代理组件的属性包括:导航代理的尺寸;导航代理的运动属性;闪避寻路等行为的属性。

Radius是导航代理的半径,Height是导航代理的高度,BaseOffset是导航物体相对于圆柱体导航代理的垂直偏移量
Steering控制属性:

  • Speed:最大移动速度
  • Augular Speed:最大转向速度
  • Acceleration:最大加速度
  • Stopping Distance:停止距离
  • Auto Barking:自动刹车
    导航代理组件中Obstacle Avoida 标签下的属性,和导航代理的躲避行为有关。
  • Quality:躲避的质量。
    Priority属性
  • Priority属性表示导航代理的优先级,范围从0-99,值越小优先级越高

###导航网格设置

导航代理的设置方法:
导航代理组件计算导航物体的运动半径,控制导航物体移动到目标位置;
导航物体移动过程中,会避开障碍物,以及其他添加导航代理的导航物体。

Unity 导航系统Navigation相关推荐

  1. Unity基础笔记(6)—— Unity导航系统

    Unity导航系统 一.NavMeshAgent组件 1. 导航系统介绍 首先看两个导航系统的应用: 网络游戏中的自动寻路功能,点击地图上的某个位置,角色自动跑到这个位置 RTS 和 Moba 类游戏 ...

  2. 11.5项目小结(推箱子Unity导航系统)

    一.推箱子 重难点: 箱子移动,推动箱子. 1.移动: 思路: 按下WASD键,先改变player的角度,然后沿着Z方向移动: if(Input.GetKeyDown(KeyCode.W)){Vect ...

  3. Unity Navigation寻路系统并画出指引线

    前言 寻路系统是游戏中很常用的一个功能,角色要达到某一点,需要系统给出一个路径,这样可以帮助玩家规划出路径,提示玩家到达,这种功能在各种类型的游戏中都有大量的应用 本案例通过Navigation实现寻 ...

  4. (完结)Unity游戏开发——新发教你做游戏(七):Animator控制角色动画播放

    文章目录 一.前言 二.Animator状态机组织 三.过渡条件 四.用代码设置过渡条件,触发动画播放 五.CharacterAniLogic.cs完整代码 一.前言 文章列表 Unity游戏开发-- ...

  5. Unity基础知识汇总

    2.Unity相关知识 2.1 Unity介绍 Unity成为一款可以轻松创建游戏和三维互动的开发工具,是一个专业跨平台游戏引擎 Unity操作快捷键 Ctrl N New Scene 新建场景 Ct ...

  6. Unity游戏开发——新发教你做游戏(三):3种资源加载方式

    文章目录 一.前言 二.Unity的目录结构规范 1.Resources(不是很推荐把资源放这个目录) 2.RawAssets(存放生资源) 3.GameRes(存放熟资源) 4.StreamingA ...

  7. Unity_导航系统

    目录 基础简介 静态网格 动态网格 分离网格连接 基础简介 Unity的导航系统是需要先分析场景中的自由活动区域和障碍区域,简单说就是先在编辑器模式下进行烘焙生成场景信息,然后再运行A*算法计算出路径 ...

  8. Unity游戏开发——新发教你做游戏(一):打开游戏开发新世界的大门

    文章目录 一.前言 二.制作思路 三.提出问题 四.具体实现 一.前言 嗨,大家好,我是新发,如下,我做了个简单的Demo,接下来我会详细介绍如何一步步制作,Demo工程我已上传到GitHub,感兴趣 ...

  9. 【Unity】Unity学习笔记目录整理

    概述及周边 [Unity]Unity 基本介绍 [Unity]Unity 相关知识分类 [Unity]Unity 特殊文件夹[未完成] [Unity]Unity 常用插件 基础知识 [Unity]Un ...

最新文章

  1. 已知机器人阿木木_LOL殇之机器人 阿木木皮肤
  2. android地址格式转换,Android(安卓)时间戳和日期之间的转化
  3. nacos1.0.0 服务管理使用mysql
  4. java开发常用jar包_Java开发中常用jar包整理及使用
  5. (一)容器从入门到深入-容器和镜像
  6. Intellij IDEA中分屏显示方法
  7. 汇编语言 test 和 cmp 区别
  8. “三十而已”女性洞察报告
  9. 或许是因为本科不是学cs的HTML5原因
  10. C语言表达式的求解规则,C语言实现整数四则运算表达式的计算
  11. C++的性能C#的产能?! - .Net Native 系列向导
  12. css怎么去掉字体样式,css怎么去掉字体粗体样式
  13. 安徽初二计算机考试试题,安徽省八年级信息技术会考题库
  14. NetXray使用说明之(6)----捕捉oicq message报文 (转)
  15. Android深色模式适配
  16. linux用户登陆报错Resource temporarily unavailable
  17. Word 如何删除页面中的回车符 / 段落标记
  18. 基于Dlib模型实现驾驶员疲劳检测项目
  19. STM32F105双CAN双FIFO通讯心得体会
  20. c语言实数运算1,C语言设计实数四则运算运用MAKEFILE,急用

热门文章

  1. 2021年西式面点师(初级)考试题及西式面点师(初级)
  2. 苹果手机怎么看生产日期?参考方法在这!
  3. 在面试软件测试岗位时被问到最多的问题
  4. [转载] 中美德突发事件应急指挥组织结构初探
  5. USDT信用卡和转账入账接口
  6. 邱锡鹏 神经网络与深度学习课程【十六】——深度信念网络
  7. 【精品】居住证、工作居住证、北京户口区别有多大?
  8. Power Apps平台利用CDS(Common Data Service)制作问卷调查
  9. 转-SIP穿越NAT SIP穿越防火墙
  10. 雷军在北京大学的演讲