标签:
学习笔记适合新手,如有错误请指正。?号处也请各位指点下,谢谢。
导航系统(navigation system)可以让人物在场景里智能地移动、围绕障碍物等
导航系统使用NavMesh来解析环境
建立场景
新建一个场景,建立地形,创建障碍物
设置NavMesh
在Hierarchy窗口中选中Terrain和3个立方体障碍物,在Insprector窗口中点击Static下拉菜单,在下拉菜单中勾选Nacigation Static
烘焙
点击导航菜单》window》Navagation按钮,打开导航窗口,点击右下角的Bake(烘焙)按钮
Navigation窗口,他有Object、Bake、Areas这3个标签页
Object标签页参数
Navagation Static:是否具有导航静态属性
Generate OffMeshLinks:生成分离网格链接
Navigation Area:类型
烘焙标签页是当行窗口中最重要的标签页,在该标签页下可设置导航代理相关参数以及烘焙相关参数
Agent Radius:导航代理半径
Agent Height:导航代理高度
Max Slope:当好代理行走的最大倾斜角度(最大准许60度)
Step Height:导航代理一步能提高的高度,可以理解为能一步走上多高的阶梯
Drop Height:地形网格之间高度差低于此值则导航代理可跳落
jump Distance:地形网格之间距离小于此值则导航代理可跃过
Manual Voxel Size:是否手动调整单元尺寸
Voxel Size:烘焙的单元尺寸,控制烘焙的精度
Min Region Area:设置最小区域,一般小于此大小的烘焙区域将被移除
Height Mesh:当地形有落差时(如阶梯),是否生成精确的面不是近似烘焙结果
Areas标签:在该标签下可设置导航区域类型
导航区域类型有3个默认的不可更改的区域类型:Walkable、Not Walkable、Jump,剩余的的是自定义的区域类型,Cost栏里要求填写浮点数,表示导航代理次区域中行走的负担,也可以使用NavMeshAgent.SetAreaCost()设定特定代理在特定区域内行走的负担
不同的区域类型在Scene视图中以对应颜色显示
NavMwsh里的Mesh,他指的是Mesh Render模型,和Collider无关
例如,有一个游戏对象,若有BoxCollider但是没有MeshRenderer,那么即使勾选了Navigation Static,也是不能作为NavMesh参与烘焙的
设置导航代理
导航代理(Navigation Agent)可以理解为去寻路的主体,选中之前创建的球体并添加NavMeshAgent组件
NavMeshAgent面板中各个导航代理参数的含义如下:
Agent Size(代理尺寸),用于设置导航代理的尺寸。
Steering(转向),用于设置导航代理的速度、角速度、加速度等与移动有关的参数
Obstacle Avoidance(障碍物躲避),用于设置导航代理如何“智能”和障碍物
Path Finding(路径搜寻),用于设置导航代理如何“智能”地到达目标点
导航代理各参数
部分 | 参数 | 说明 |
Agent Size | Radius | 导航代理的半径,用于计算代理和障碍物的碰撞 |
Height | 导航代理的高度 | |
Base offset | 圆柱体碰撞体相对于本地坐标原地的坐标偏移 | |
Steering | Speed | 最大移动速度(米/秒) |
Angular Speed | 最大角速度(度/秒) | |
Acceleration | 最大加速度 | |
Stopping Distance | 到达距离目标位置多少的距离停下来 | |
Auto BraKing | 激活时,到达目标位置前,将“刹车”,就是减速 | |
Obstacle Avoidance | Quality | 躲避障碍物的质量,当有大量导航代理时,降低质量能减少CPU使用率,如果设置为0,则不会躲避其他代理 |
Priority | 设置自身的导航优先级,范围是【0,99】值越小优先级越大,导航代理只会躲避比自身优先级高的其他代理 | |
Path Finding | Auto Traverse Off Mesh Link | 激活时,将自动通过Off Mesh Link,不激活时可以通过播放动画等方式通过 |
Auto Repath | 当无法到达目标点的时候,导航代理会再次以相同路线来到一个距离膜表点最近的位置 | |
Area Mask | 设置哪个区域类型,此导航代理可以行走 |
创建一个脚本并命名为MyAgent,将代码添加至主体球体,在将destinationTarget设置为目标圆柱体,agent为球体本身
using UnityEngine; using System.Collections; public class MyAgent : MonoBehaviour { public GameObject destinationTarget; public NavMeshAgent agent; void Start () { //设置导航代理的目标位置 agent.destination = destinationTarget.transform.position; } }
标签:
原文地址:http://www.cnblogs.com/kubll/p/4955721.html