2019-08-07 20:25:58 qq_31828929 阅读数 101

首先:随便搭个地形,有个平台和斜坡,注意斜坡的倾斜程度。
在这里插入图片描述
搭出来的样子,然后需要设置它们的Layer和勾选Navigation static 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打开Navigation进行navmesh的烘焙
在这里插入图片描述
在这里插入图片描述
上图大红框中是我们可以设置的配置的:我们可以设置agent(我们需要进行寻路的对象)的半径和高度还有可以爬坡的倾斜度,比如我们在刚刚设置的斜坡角度大于45°,那么我们的agent就上不去,还可以设置links的一些属性,links应该是比如有两个平台,可以跳过去的效果。然后点击bake烘焙可以得到下图的烘焙效果,蓝色代表可以寻路的地方。
在这里插入图片描述
然后新建一个cylinder做我们的agent用来寻路。
在这里插入图片描述
要给它设置添加Nav Mesh Agent组件,然后我还添加了Rigidbody组件,还有一个C#脚本。
在这里插入图片描述
代码主要实现了鼠标点击位置然后我们的agent就去哪个地方

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class AutoFindPath : MonoBehaviour
{
    public Vector3 MousePosition;
    public Transform Des;
    private void Start()
    {
        Debug.Log(Des);
        StartFindPath(Des);
    }
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, LayerMask.GetMask("Ground")))
            {
                MousePosition = hit.point;
                StartFindPath(MousePosition);
            }
        }
    }
    private void StartFindPath(Vector3 destination)
    {
        this.GetComponent<NavMeshAgent>().destination = destination;
    }
    private void StartFindPath(Transform destination)
    {
        this.GetComponent<NavMeshAgent>().destination = destination.position;
    }
}

效果:
在这里插入图片描述

2015-03-07 21:56:00 book_longssl 阅读数 2655

导航网格烘焙
一旦标记完导航网格 (Navmesh) 几何体和层之后,就可以烘焙导航网格几何体了。

在导航 (Navigation) 窗口中(窗口 (Window)->导航 (Navigation)),转到烘焙 (Bake) 选项卡(右上角),然后点击“烘焙”按钮(右下角)。



导航烘焙窗口

以下是会影响导航网格 (Navmesh) 烘焙的属性:


   
半径 (Radius) “典型”代理的半径(最好是最小值)。
高度 (Height)
“典型”代理的高度(角色通过所需的“空隙”)。
最大坡度 (Max Slope)
坡度大于此值的所有表面会予以丢弃。
台阶高度 (Step height)
高度差低于台阶高度时,则认为连接至导航网格区域。
下落高度 (Drop height)
如果该属性值是正数,则将为高度差小于该值的相邻导航网格表面放置分离网格链接。
跳跃距离 (Jump distance)
如果该属性值是正数,则将为水平距离小于该值的相邻导航网格表面放置分离网格链接。
高级 (Advanced)
最小区域面积 (Min region area)
面积小于该阈值的区域将予以丢弃。
宽度误差 (Width inaccuracy) % 容许的宽度误差
高度误差 (Height inaccuracy) % 容许的高度误差
高度网格 (Height mesh) 如果勾选此选项,原始高度信息会存储起来。这会对速度和内存性能造成一定影响。


请注意,烘焙的导航网格是场景的一部分,代理可以通过该导航网格。要删除导航网格,在烘焙 (Bake) 选项卡中点击清除 (Clear)。

实现细节
烘焙导航网格 (Navmesh) 时,它会映射到 XZ 平面中的方格中。可视化方格时,其边框被视为导航网格 (Navmesh) 上的亮蓝色轴对齐线。Unity 在一个场景中最多支持 1024 个方格,每个方格用 1000×100 个体素表示。如果您打算让代理在大区域中导航,请注意导航网格 (Navmesh) 的大小和最终的网格数。



具有亮蓝色轴对齐线的导航网格显示方格标度

半径 (Radius) 的默认设置为 0.5,宽度误差 (Width Inaccuracy) 的默认设置为0.16666667 (16.666667%)。默认设置的方格边长可计算为:
1000 * (2*半径) * 宽度误差 = 1000 * (2*0.5) * 0.16666667 = 166.66667。

增加宽度误差 (Width Inaccuracy) 将允许容纳更大面积,但会降低导航网格 (Navmesh) 精度。

例如,如果您的网格有 32 x 32 个方格,则您将拥有 1024 个方格。这意味着,如果您拥有想与导航网格 (Navmesh) 配合使用的真正巨大地形,按照默认设置,该地形面积不得超过 5.333 乘以 5.333 千米(32 * 166.66667 米)

2018-06-29 17:07:00 G_Peter 阅读数 1897

unity中为我们提供了很实用的寻路功能,接下来我们就看看这个寻路功能怎么事现

 

  一、在window中打开Navigation窗口准备烘焙地形

二、在inspector界面中将场景中的障碍物勾选为静态( navigation static)

三、在Navigation窗口中进行导航网个的烘焙

Navigation中的主要参数
    //Areas(区域):相当于障碍物的标签,可以在寻路物体身上的Navmeshagent组件中的AreaMask中屏蔽某一区域
    //Bake(烘焙):生成指定的寻路网格
        //Agent Radius: 寻路物体的半径
        //Agent Heigh: 驯鹿物体的高度
        //Max Slope: 寻路物体可前进的最大坡度(最大为60度)
        //Step Heigh: 寻路物体前进可跨过的最大高度(最大不能超过寻路物体的身高)
        //Drop Heigh: 寻路物体下落的最大高度
        //Jump Distance 驯鹿物体跳跃的最大距离
   //Object(对象,障碍物):设置指定游戏物体的寻路烘焙属性
   //Navigation Static:设置当前游戏物体为寻路静态状态
   //Generate offMeshLinks:是否生成网格连接,如果勾选,网格之间会指定跳点烘焙

   //Navigation Area:设置当前游戏物体的导航区域

设置完成后,直接点击Bake场景中会生成导航网格

蓝色部分是导航代理可以行走的部分

四、生成导航网格后,在需要自动导航的物体上添加NavMeshAgent组件

其中几个主要参数

Agent Type :导航代理的类型,这个参数下一节会用到

Base Offset:导航代理和当前游戏物体位置的差值

speed:移动速度

Angular Speed:转向速度

Acceleration:移动加速度

Radiuse: 导航代理的半径

Heigh:导航代理的高度

 

注意:需要导航是的游戏物体上不要同时出现刚体和NavmeshAgent两个组件,他们都会作用于物体的位置信息,可能会发生冲突导致导航失败

五、就接下来在代码中动态设置导航的终点

使用NavMeshAgent类中的函数SetDestination(Vector3 Target);函数来指定导航的终点就可以了

 

2019-11-12 22:20:23 fwb330198372 阅读数 53

在使用Navmesh Surface烘焙导航网格的时候,很多时候有些物品上面是不能走的,即使烘焙了导航网格,如下图:

顶部有导航网格

这些导航对于程序来说可能是个问题,因为它本身不可到达,在寻找导航点的时候,它会增加程序寻点的成本,一般我们需要手动配置剔除。

剔除的方法:

  1. 选中顶部不需要导航风格的物品
  2. 添加NavmeshModifier
  3. 勾选:Override Area
  4. Area Type选择:Not Walkable
  5. 重新烘焙一下即可

 

希望能帮助到你

2018-11-22 16:07:35 soukenan 阅读数 314

导航系统又称寻路系统,在siki学院的视频教程中,我们将通过介绍内置的导航系统来深入学习Unity3D的人工智能。我将展示如何在场景找到最短的路径以及避开障碍。
第一步:要对场景进行网格烘焙。选择window-Navigation

NavMesh(导航网格)是3D游戏世界中用于实现动态物体自动寻路的一种技术,将游戏中复杂的结构组织关系简化为带有一定信息的网格,在这些网格的基础上通过一系列的计算来实现自动寻路。。导航时,只需要给导航物体挂载导航组建,导航物体便会自行根据目标点来寻找最直接的路线,并沿着该线路到达目标点。

下面通过一个简单的案例来介绍NavMesh的应用:

并在Inspector面板中选中为静态(static)下拉选项的Navigation Static,如下图。
在这里插入图片描述

2.依次选择 Navigation-Bake ,打开后面板如下。
在这里插入图片描述

单击该面板右下角的Bake按钮,即可生成导航网格,蓝色为可行走区域。
(如何不想烘培石头上方为可行走可以在Object中选择Not walk able)

3.下面就可以让一个运动体根据一个导航网格运动到目标位置。

把游戏人物创建一个capsule(胶囊)运动体,为该胶囊挂在一个Nav Mesh Agent(Component - Navigation - Nav Mesh Agent);最后写一个脚本就可以实现自动寻路了。脚本如下:

using UnityEngine.AI;

public class Hero:MonoBehaviour{
    
    public NavMeshAgent agent;
    
    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);
        }
        }
    }
}

脚本新建完成后挂载到胶囊体上,然后点击鼠标在场景内就能到达目标位置了。

这样一个简单的自动寻路就完成了,如果要更精细的寻路,或要实现上坡,钻"桥洞"等,可根据下面介绍的相关参数进行调节。

下面介绍 Navigation 组件和 Nav Mesh Agent 组件的相关参数。
Navigation

Object:物体参数面板
Navigation Static:勾选后表示该对象参与导航网格的烘培。
OffMeshLink Generation:勾选后可跳跃(Jump)导航网格和下落(Drop)。
Bake:烘培参数面板
Radius:具有代表性的物体半径,半径越小生成的网格面积越大。
Height:具有代表性的物体的高度。
Max Slope:斜坡的坡度。
Ste Height:台阶高度。
Drop Height:允许最大的下落距离。
Jump Distance:允许最大的跳跃距离。
Min Region Area:网格面积小于该值则不生成导航网格。
Width Inaccuracy:允许最大宽度的误差。
Height Inaccuracy:允许最大高度的误差。
Height Mesh:勾选后会保存高度信息,同时会消耗一些性能和存储空间。
Nav Mesh Agent:导航组建参数面板

Radius:物体的半径
Speed:物体的行进最大速度
Acceleration:物体的行进加速度
Augular Speed:行进过程中转向时的角速度。
Stopping Distance:离目标距离还有多远时停止。
Auto Traverse Off Mesh Link:是否采用默认方式度过链接路径。
Auto Repath:在行进某些原因中断后是否重新开始寻路。
Height:物体的高度。
Base Offset:碰撞模型和实体模型之间的垂直偏移量。
Obstacle Avoidance Type:障碍躲避的的表现登记,None选项为不躲避障碍,另外等级越高,躲避效果越好,同时消耗的性能越多。
Avoidance Priority:躲避优先级。
NavMesh Walkable:该物体可以行进的网格层掩码。

没有更多推荐了,返回首页