Unity 导航系统Navigation
基于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相关推荐
- Unity基础笔记(6)—— Unity导航系统
Unity导航系统 一.NavMeshAgent组件 1. 导航系统介绍 首先看两个导航系统的应用: 网络游戏中的自动寻路功能,点击地图上的某个位置,角色自动跑到这个位置 RTS 和 Moba 类游戏 ...
- 11.5项目小结(推箱子Unity导航系统)
一.推箱子 重难点: 箱子移动,推动箱子. 1.移动: 思路: 按下WASD键,先改变player的角度,然后沿着Z方向移动: if(Input.GetKeyDown(KeyCode.W)){Vect ...
- Unity Navigation寻路系统并画出指引线
前言 寻路系统是游戏中很常用的一个功能,角色要达到某一点,需要系统给出一个路径,这样可以帮助玩家规划出路径,提示玩家到达,这种功能在各种类型的游戏中都有大量的应用 本案例通过Navigation实现寻 ...
- (完结)Unity游戏开发——新发教你做游戏(七):Animator控制角色动画播放
文章目录 一.前言 二.Animator状态机组织 三.过渡条件 四.用代码设置过渡条件,触发动画播放 五.CharacterAniLogic.cs完整代码 一.前言 文章列表 Unity游戏开发-- ...
- Unity基础知识汇总
2.Unity相关知识 2.1 Unity介绍 Unity成为一款可以轻松创建游戏和三维互动的开发工具,是一个专业跨平台游戏引擎 Unity操作快捷键 Ctrl N New Scene 新建场景 Ct ...
- Unity游戏开发——新发教你做游戏(三):3种资源加载方式
文章目录 一.前言 二.Unity的目录结构规范 1.Resources(不是很推荐把资源放这个目录) 2.RawAssets(存放生资源) 3.GameRes(存放熟资源) 4.StreamingA ...
- Unity_导航系统
目录 基础简介 静态网格 动态网格 分离网格连接 基础简介 Unity的导航系统是需要先分析场景中的自由活动区域和障碍区域,简单说就是先在编辑器模式下进行烘焙生成场景信息,然后再运行A*算法计算出路径 ...
- Unity游戏开发——新发教你做游戏(一):打开游戏开发新世界的大门
文章目录 一.前言 二.制作思路 三.提出问题 四.具体实现 一.前言 嗨,大家好,我是新发,如下,我做了个简单的Demo,接下来我会详细介绍如何一步步制作,Demo工程我已上传到GitHub,感兴趣 ...
- 【Unity】Unity学习笔记目录整理
概述及周边 [Unity]Unity 基本介绍 [Unity]Unity 相关知识分类 [Unity]Unity 特殊文件夹[未完成] [Unity]Unity 常用插件 基础知识 [Unity]Un ...
最新文章
- 已知机器人阿木木_LOL殇之机器人 阿木木皮肤
- android地址格式转换,Android(安卓)时间戳和日期之间的转化
- nacos1.0.0 服务管理使用mysql
- java开发常用jar包_Java开发中常用jar包整理及使用
- (一)容器从入门到深入-容器和镜像
- Intellij IDEA中分屏显示方法
- 汇编语言 test 和 cmp 区别
- “三十而已”女性洞察报告
- 或许是因为本科不是学cs的HTML5原因
- C语言表达式的求解规则,C语言实现整数四则运算表达式的计算
- C++的性能C#的产能?! - .Net Native 系列向导
- css怎么去掉字体样式,css怎么去掉字体粗体样式
- 安徽初二计算机考试试题,安徽省八年级信息技术会考题库
- NetXray使用说明之(6)----捕捉oicq message报文 (转)
- Android深色模式适配
- linux用户登陆报错Resource temporarily unavailable
- Word 如何删除页面中的回车符 / 段落标记
- 基于Dlib模型实现驾驶员疲劳检测项目
- STM32F105双CAN双FIFO通讯心得体会
- c语言实数运算1,C语言设计实数四则运算运用MAKEFILE,急用