码迷,mamicode.com
首页 > 其他好文 > 详细

导航系统——01实现导航系统

时间:2015-11-11 13:11:47      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:

学习笔记适合新手,如有错误请指正。?号处也请各位指点下,谢谢。

导航系统(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;
    }
}

导航系统——01实现导航系统

标签:

原文地址:http://www.cnblogs.com/kubll/p/4955721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!