1. 原生导航系统

1. 基本使用

窗口->AI->导航 打开导航界面。

导航系统在使用前要先烘焙,拥有静态navigation static的对象会在上面根据要求生成可到达以及无法到达的区域,取消勾选该对象,以能够随意地在该对象上移动。

2. 烘焙导航网格
参数 描述
代理半径 区域与边缘的最小半径
代理高度 区域内地面与上方障碍物的最小高度
最大坡度 斜坡最大高度
步高 垂直台阶可上升的最大高度
3. 控制单位

为控制单位物体添加NavMeshAgent组件,并引入UnityEngine.AI

面板功能 描述
speed 移速
Angular Speed 旋转速度
Acceleration 加速度
Stopping Distance 停止距离
Auto Braking 自动刹车
代码功能 描述
SetDestination(Vector3) 设置移动导航目标点
updatePosition 是否自动更新位置
updateRotation 是否自动更新旋转轴
remainingDistance 与目标的距离
nextPosition 导航网络的目标点
desiredVelocity 旋转的目标方向

代码实例:利用通过代码控制角色移动

private NavMeshAgent agent;float rotateTime = 0;
public float rotateSmooothing = 7;
public float speed = 4;void Start()
{agent = GetComponent<NavMeshAgent>();agent.updatePosition = false;agent.updateRotation = false;
}private void Update()
{if (Input.GetMouseButtonDown(0)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if(Physics.Raycast(ray, out hit)){agent.SetDestination(hit.point);}rotateTime = 0;}Move();
}private void Move()
{if(agent.remainingDistance > 0.5f){agent.nextPosition = transform.position;// agent.desiredVelocity 该朝向的方向transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(agent.desiredVelocity), rotateTime);rotateTime = rotateSmooothing * Time.deltaTime;// 前进方向永远与是自身的前方// transform.Translate(transform.forward * speed * Time.deltaTime);transform.Translate(Vector3.forward * speed * Time.deltaTime);}
}
4. 导航对象
选项 描述
All 显示所有
Mesh Renderers 显示导航网格渲染的对象们
Terrains 地形
5. navigation area(区域)

每种区域可以设置一个花费,给予对象一个经过这段路程的耗费值

若想对象完全无法到达,点击那个对象,在导航的对象中找到navigation area,设置为not walkable。

6. 平台跳跃

首先要在烘焙中设置跳跃高度

为可以跳跃的平台设置Generate OffMeshLinks以生成可跳跃区域

7. 导航网络障碍

通过添加导航网络障碍,来为导航网络添加动态的障碍物

功能 描述
切割 在物体静止后重新生成导航网格(用于不经常移动的物体)
8. Off Mesh Link

一个自定义的跳跃点,挂在在单独一个组件上

参数 描述
起始 起始位置
结束 结束位置
成本 等距耗费倍数
双向 是否双向
已激活 是否激活
自动更新位置 运行后是否根据两个坐标当时位置更新
9. NavMeshComponent

先要下载导入NavMeshComponents模块。

为导航面物体添加NavMeshSurface组件。

功能 描述
Agent Type 导航网格使用哪一类参数进行烘培(自定义后选择一种,与Nava Mesh Agent保持一致)
Collect Objects 渲染范围(音量:指区域渲染)
Use Geometry 渲染依据mush render还是碰撞器
BuildNavMesh() 重新烘培导航网络

2. 2D导航系统

1. 基本使用
  1. 基于原生导航系统的扩展
  2. 为需要导航的精灵添加组件 NavMeshModifier 设置导航区域
  3. 创建空对象,添加脚本 NavMeshSurface、NavMeshCollectSorces2D 组件。
    点击 NavMeshCollectSorces2D 中的 Rotate Surface to XY 旋转至 XY 轴后,点击 NavMeshSurface中的烘焙,烘焙网络。
  4. 修改原生导航网络的代理,调整代理参数(如边界)。
  5. 为需要导航的对象添加脚本 Nav Mesh Agent
  6. 代码中使用
// 导航组件
NavMeshAgent agent;
// 目标
public Transform targetTrans;void Start()
{agent = GetComponent<NavMeshAgent>();// 禁止旋转agent.updateRotation = false;agent.updateUpAxis = false;
}void Update()
{SetDestination(targetTrans.position);
}// 插件存在小bug,如果在同一y轴时可能会无法正确寻路,因此需要手动为其添加位置偏移、
void SetDestination(Vector3 pos)
{float agentOffset = 0.0001f;Vector3 agentPos = (Vector3)(agentOffset * Random.insideUnitCircle) + pos;agent.SetDestination(agentPos);
}
2. 设置不可走区域
  1. 为障碍物对象(瓦片地图)添加组件 NavMeshModifier。注意勾选重写覆盖为不可行走区域。

  2. NavMeshModifierVolume 允许你设定区域障碍。

  3. 可在此处设置烘焙区域模型(形状)

3. 改用碰撞盒进行区域判定
  1. 原生设置是以图像精灵的纹理区域决定区域位置大小
  2. 根基碰撞盒的大小形状不同,可生成出不同形状的区域以及不可达区域。
  3. 修改此项即启用

unity-导航系统相关推荐

  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

    基于unity引擎的开发进阶之 导航系统 在游戏中常常有根据目标位置自动生成路线并自动寻路的功能,在3d导航中我们需要根据目的地生成到达目的地的可行路径. Unity的Navigation导航功能通过 ...

  4. unity 创建图片ui_在 Unity中 将游戏数据储存至本地文档

    作者:游戏工坊-胡继伟 链接:https://blog.csdn.net/hu1262340436/article/details/110236103 在Unity中 添加本地文档储存游戏数据 首先我 ...

  5. Unity基础知识汇总

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

  6. Unity_导航系统

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

  7. 3D游戏编程与设计作业10

    3D游戏编程与设计作业10 环境说明 Unity3D 导航与寻路 Agent 和 Navmesh 练习 Obstacle和Off-Mesh-Link练习 P&D 过河游戏智能帮助实现 状态图 ...

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

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

  9. unity碰撞检测函数,碰撞信息获取,触发检测,使用粒子系统创建火焰,创建动画(火光闪烁),导航系统,通过导航系统控制人物移动,控制摄像机的跟随,控制角色动画播放

    碰撞检测函数 private void OnCollisionEnter(Collision collision){print("OnCollisonEnter");}privat ...

  10. 【Unity 3D 从入门到实战】Unity 3D 导航系统

    目录 一,前言 二,导航系统介绍 三,Navigation总控制面板介绍 1,Agents面板(导航参数设置) 2,Areas面板(层设置) 3,Bake面板(烘焙导航网格) 4,Object面板(对 ...

最新文章

  1. Linux下如何同时注释多行/同时取消多行注释
  2. oracle adf 使用,ORACLE ADF 问题总结
  3. react中js文件中写html,javascript – 使用静态HTML与React
  4. Scala元组数据的遍历
  5. java传送字符到前端_javaWeb后台特殊字符怎样还原传给前端正确显示?
  6. 对HTTP基本认识(HTTP协议入门必备)
  7. 学会判断Web安全网关的性能
  8. Protable 自定义添加搜索栏和toolbar
  9. 无法启动此程序因为计算机丢失gdiplus,gdiplus.dll 丢失
  10. 电气控制技术实训考核装置
  11. 日期,Wed Nov 24 2021 08:00:00 GMT+0800 (GMT+08:00) 相互转换
  12. jenkins如何清缓存_Maven本地缓存清理小工具
  13. BUUCTF Crypto RSA what writeup
  14. 中北大学信息商务学院计算机系学生会名单,2017年中北大学信息商务学院新媒体中心部员竞选结果公示...
  15. 已解决ModuleNotFoundError: No module named ‘Workbook‘
  16. ipv6地址概述——带你了解ipv6与ipv4的不同
  17. scikit-learn学习笔记-bili莫烦
  18. (计算机组成原理)RISC与CISC的区别
  19. PPT提示缺少字体怎么解决?
  20. PMP证书的必要性、培训机构选择以及其他相关问题整理

热门文章

  1. 莫比乌斯带catia建模_神奇的莫比乌斯带(mobius)
  2. html 选项按照abcd,怎么把Word里的多个题目的ABCD 选项快速排列整齐
  3. 【先进事迹】11111HTML
  4. php 表情 代码_PHP 大量QQ表情代码替换
  5. 2020604 Java基础复习
  6. 优秀程序员的45个习惯[摘]
  7. “裸考”通过CATTI考试的经历
  8. 按键精灵sub子程序篇
  9. java viewer 控件_插件制作过程记录(使用TreeViewer贡献视图)
  10. 4.1 Linux之初识Linux