文章目录
- 打开导航页面
- Agents 可以设置多种导航类型
- Areas
- Bake
- Object
- 导航组件
- Nav Mesh Agent 寻路组件
- Off-Mesh Link 跳跃
- Nav Mesh Obstacle 动态路障
- 导航类
- NavMeshAgent
- 字段
- 方法
- AreaMask值
打开导航页面
Window ==》Navigation
Agents 可以设置多种导航类型
AgentTypes:设置不同的导航者类型
Name:导航者的名字
Radius:导航碰撞体的半径
Height:导航碰撞体的高度
SetpHeight:导航者的脚步高度
MaxSlope:导航者爬坡的最大坡度
Areas
对导航设置不同的区域
Name:区域名称
Cost:导航消费值
通过不同区域的导航消费值的高低来计算那一条导航路径消费最低
Bake
导航前需要先烘焙导航网格
Agent Radius:代理半径,地图宽度大于2倍半径的道路才可以通过。
Agent Height:导航高度,导航代理能通过的最低高度
Max Slope:最大斜坡角度,导航代理最大能爬上的斜坡角度
Step Height:脚步高度,导航代理能通过的最大台阶高度
Drop Height:跳下高度,导航代理能跳下的最大高度
Jump Distance:跳跃距离,导航代理能跳过得最大距离
Manual voxel size :是否可以改变烘焙操作过程中的精确性
Voxel Size:体素大小,默认的体素设置最好的权衡了准确性和烘焙速度。
Min Region Area:允许你剔除掉小的非连接NavMesh区域,当NavMesh区域小于指定值时将被剔除
Height mesh :允许你为角色提供更精准的位置
Clear:清除导航网格
Bake:将设置烘焙成网格
Object
ALL:所有对象 Mesh Renderers:带此组件的对象 Terrains:地形对象
Navigation Static :上面说了只有选中了Navigation Static之后才能进行网格导航。
Generate OffMeshLinkes:处于勾选状态的话,网格导航可以Jump和Drop。
Navigation Area:导航网格层
导航组件
在进行添加组件前,先将地形中不能移动的障碍物将Navigation Static勾选上
Static:
Nothing:没有任何属性;
Everyting:所有的都是静态的,Unity可以优化;
LightMap Static:光照阴影是固定不变的;
Occluder Static: 遮挡静态
Batching Static:静态批处理
Navigation Static:导航静态
Occludee Static:被遮挡静态
Off Mesh Link Generation:连接两个不连续的区域,在导航时可以在两个点进行跳跃
Reflection Probe Static:反射
Nav Mesh Agent 寻路组件
Agent Type:代理类型,选择导航类型
base offset : 导航碰撞体底部和挂载该组件的物体中心点的偏移
Speed:最大移动速度
Angular Speed :最大转向速度
Acceleration :最大加速度
Stopping distance:最后停留点与目标点的距离
Auto Braking:是否自动刹车,如果勾选在达到目标点之前会慢慢减速至0
Radius:导航组件的半径
Height:导航组件的高度
Quality:躲避障碍物的精确度,越高耗能越大
Priority:0-99之间,两个导航者在一起时,低的先走,高的避开
Auto Traverse OffMesh Link:导航者到达导航跳跃点,是否自动越过起点到终点
Auto Repath:是否自动再次定位,导航者不能达到目标点时停留在某一处,如果突然有一条路能达到目标点,这个时候如果这个开启则会重新寻路,否则不会
Area Mask:规定导航着可以行走的区域,自己可以定义不同的导航网格,在烘焙导航网格的时候
Off-Mesh Link 跳跃
Start:跳跃的起点
End:跳跃的终点
Cost Override:成本覆盖,值为正,则在路径请求处理中计算路径成本时使用该属性,否则,我们使用默认成本
BiDirectional:双向开关,若不勾选则只能从Start到End跳跃
Activated:导航是否可以使用该跳跃路径
Auto Update Positions:勾选则自动完成跳跃,不勾选则可通过代码实现跳跃
Navigation Area:设置导航区域
Nav Mesh Obstacle 动态路障
Shape:选择形状,有Box和Capsule两种类型
Center:形状的位置
Size:形状的大小
Carve:选中后导航体会自动换路,不会在一个树上吊死(有其他路的话)
- Move Threshold:超过这个值导航体才会重新生成网格
- Time To Stationary:超过这个值的时间才会开始生成网格
- Carve Only Stationary:是否实时生成网格
导航类
NavMeshAgent
字段
名称 | 作用 |
acceleration | 最大加速度,面板上的辣锅 |
agentTypeID | 导航区域的ID |
angularSpeed | 最大转向速度 |
areaMask | 指定哪一个NavMesh区域是可用的 |
autoBraking | 自动刹车,避免超过目的地点 |
autoRepath | 自动重新获取路径 |
autoTraverseOffMeshLink | 自动穿过Off Mesh Link(上面有介绍) |
avoidancePriority | 当代理是一个障碍物时,级别低的代理被忽视 |
baseOffset | 基础偏移 |
currentOffMeshLinkData | 当前分离路⾯导航的数据,有字段:activated:是否处于激活状态 startPos:分离路⾯起点 endPos:分离路⾯终点 offMeshLink:是否是手动放置的 valid:链接是否有效 linkType:LinkTypeManual:使⽤OffMeshLink组件完成分离路⾯导航 LinkTypeDropDown:跳下⽅式 LinkTypeJumpAcross:⽔平跳跃⽅式 |
desiredVelocity | 期望速度 |
destination | 获取或设置目的地 |
hasPath | 当前是否有路径到达目的地 |
height | 可以通过的高度 |
isOnNavMesh | 该代理当前绑定到导航网格吗 |
isOnOffMeshLink | 代理当前的位置在一个OffMeshLink上吗 |
isPathStale | 当前路径是否陈旧 |
isStopped | 是否开始/停止导航 |
navMeshOwner | 返回代理当前所在的NavMesh的拥有对象 |
nextOffMeshLinkData | 当前路径的下一个OffMeshLinkData |
nextPosition | 下一步应该走的位置 |
obstacleAvoidanceType | 规避质量的水平,上图有,就是修改Quality |
path | 设置或者获取当前路径,返回的是NavMeshPath类型,有字段corners:路径的拐点 status:路径的状态(到达目标,中途到达目标或完全无效) 和方法ClearCorners:从路径中删除所有拐角点 GetCornersNonAlloc:计算路径的拐角 |
pathPending | 进程中的路径正在被计算但是还没转备好,bool值 |
pathStatus | 返回的是NavMeshPathStatus类型,当前路径的状态(PathComplete:完成,PathPartial:局部或PathInvalid:无效) |
radius | 代理的避让半径,如上图的Radius |
remainingDistance | 在当前路径中,代理的位置和目标位置的距离,如果这个距离是未知的那么这个值是infinity |
speed | 在一条路径上行走时的最大移动速率 |
steeringTarget | 获得路径上的当前转向点 |
stoppingDistance | 当距离目标位置这个距离的时候停止,如上图Stopping distance |
updatePosition | 获取或设置transform position是否与模拟的代理位置同步。默认为true |
updateRotation | 代理是否更新方向 |
updateUpAxis | 允许您指定是将代理对齐到NavMesh的上轴还是将其放置在其上的链接 |
velocity | 获取NavMeshAgent组件的当前速度,或者手动为代理设置一个速度 |
方法
名称 | 作用 |
ActivateCurrentOffMeshLink(bool activated) | 激活当前分离网格链接 |
CalculatePath(Vector3 targetPosition, NavMeshPath path) | targetPositon 路径要求的重点位置。path 作为结果的路径,如果路径被找到返回true |
CompleteOffMeshLink | 结束当前OffMeshLink上的移动,代理会移动到离当前OffMeshLink另一端最近的有效的位置 |
FindClosestEdge(out NavMeshHit hit) | hit 掌握定位结果的性能返回的NavMeshHit 包含最近的边缘上的最近的点的位置和细节,distance:到击中点的距离 hit:命中时设置标志 mask:在命中点指定 NavMesh:区域的蒙版 normal:(不清楚) position:命中位置。如果最近的边缘被找到返回True |
GetAreaCost(int areaIndex) | areaIndex 区域索引,返回指定的区域索引当前的消耗 |
Move(Vector3 offset) | offset 相对的移动向量,申请一个相对当前位置的移动,如果代理有一个路径他将被校正 |
Raycast(Vector3 targetPosition, out NavMeshHit hit) | targetPosition 将要移动到的终点 hit 被射线发现的障碍物的属性(如果有) ,如果代理和目标位置之间有障碍物返回True,否则false |
ResetPath | 清除当前路径,路径清除之后代理不会寻找一个新的路径直到SetDestination 被调用,如果调用该函数时在OffMeshLink上,则会立即完成 |
SamplePathPosition(int areaMask, float maxDistance, out NavMeshHit hit) | areaMask 一个位域标志,指定了寻路是哪个区域可以通过 maxDistance 超出这段距离则终止搜索路径 hit 保存结果地理位置的属性 ,如果在maxDistance之前结束返回true,否则false |
SetAreaCost(int areaIndex, float areaCost) | areaIndex 区域索引 areaCost 指定的区域的新的消耗,设置穿过某种类型的区域时的消耗,如果你启用或废除代理,那么消耗将会被重置为默认值 |
SetDestination(Vector3 target) | target 导航到的目标点,如果目标地址请求成功返回True,否则false |
SetPath(NavMeshPath path) | path 新的寻路路径,指定一段新路径给代理 |
Warp(Vector3 newPosition) | 让代理移动到指定的newPosition,之后代理不做任何移动 |
AreaMask值
-1表示全选
若是挑选部分层,则该值的计算方法为:层编号-1,此值作为2的幂,将所有选定层的值相加
例如,选定1,3,5,6层AreaMask的值
2(1-1)+2(3-1)+2(5-1)+2(6-1)=53