`
20386053
  • 浏览: 461425 次
文章分类
社区版块
存档分类
最新评论

Unity手游之路<八>自动寻路Navmesh之入门

 
阅读更多

现在的大部分mmo游戏都有了自动寻路功能。点击场景上的一个位置,角色就会自动寻路过去。中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。使用Unity来开发手游,自动寻路可以有很多种实现方式。第一种比较传统的是使用A星寻路,它是一种比较传统的人工智能算法,在游戏开发中比较常用到。大部分的页游和端游都用到这种技术。在Unity游戏也可以用这种技术,Asset Store上面已经有相关的组件了,感兴趣的同学可以自己去了解。我在后面有机会再来详细介绍了。今天我们来学习Unity官方内置的寻路插件-Navmesh。由于内容比较多,我们将分几次来系统学习。今天先通过学习一个最简单的例子来入门。

(转载请注明原文地址http://blog.csdn.net/janeky/article/details/17457533

  • 实例
我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去。角色会绕过各种复杂的障碍,找到一条理论上”最短路径“。
  • 步骤
1.创建地形
2.添加角色
3.创建多个障碍物,尽量摆的复杂一点,来检查Navmesh的可用性和效率。
4.选中地形,在Navigation窗口中,设置Navigation Static

5.依次选中障碍物,在avigation窗口中,设置Navigation Static
7.Navigation窗口中,选择Bake(烘焙)界面,点击Bake按钮,进程场景烘焙,就可以烘焙出寻路网格了
8.为角色添加NavMeshAgent组件。Component->Navigation->Nav Mesh Agent
9.为角色新增一个脚本PlayerController.cs,实现点击目标,自动寻路功能
using UnityEngine;
using System.Collections;

//Author:ken@iamcoding.com
public class PlayerController : MonoBehaviour
{
    private NavMeshAgent agent;


    void Start()
    {
        //获取组件
        agent = GetComponent<NavMeshAgent>();
    }


    void Update()
    {
        //鼠标左键点击
        if (Input.GetMouseButtonDown(0))
        {
            //摄像机到点击位置的的射线
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                //判断点击的是否地形
                if (!hit.collider.name.Equals("Terrain"))
                {
                    return;
                }
                //点击位置坐标
                Vector3 point = hit.point;
                //转向
                transform.LookAt(new Vector3(point.x, transform.position.y, point.z));
                //设置寻路的目标点
                agent.SetDestination(point);
            }
        }


        //播放动画,判断是否到达了目的地,播放空闲或者跑步动画
        if (agent.remainingDistance == 0)
        {
            animation.Play("idle");
        }
        else
        {
            animation.Play("run");
        }
        
    }
}
完成了,可以看看效果:


  • 相关知识
1.角色身上的Nav Mesh Agent 组件

Radius 半径: 代理的半径(仅用于寻路目的,可以跟实际对象的半径大小不一样,一般比实际对象的半径大)。
Speed 速度: 代理可以周游世界,走向它的目的地的最大移动速度。
Acceleration 加速度: 最大加速度。
Angular Speed 角速度: 最高转速(度/秒)。
Stopping distance 制动距离:制动距离。到目的地的距离小于这个值,代理减速。
Auto Traverse OffMesh Link 自动遍历OffMesh链接:自动移动并关闭OffMeshLinks
Auto Repath 自动重新寻路:如果现有的部分已失效,获得新的路径。
Height 高度:代理的高度(用于调试图形)。
Base offset 基本偏移:碰撞几何体相对于实际几何体垂直的偏移。
Obstacle Avoidance Type 障碍躲避类型 :躲避的质量水平。
NavMesh Walkable 导航网格行走:指定代理可以遍历的导航网格层类型。这个参数很有用,在接下来的实例中可以用到

2.障碍物一定要有Mesh Render,用于烘焙寻路网格。
  • 总结
这个实例可以很简单的让我们学会如何最基本的使用自动寻路组件Nav。但是,这个组件还提供了更加强大的功能,比如,起始点和目标点中间出现阻断了,
怎么办?在下面的文章中,我们将会继续探寻其他强大的功能。

  • 源码

http://pan.baidu.com/s/1hqC6v4o

  • 参考资料

1.http://www.xuanyusong.com/

2.http://liweizhaolili.blog.163.com/

3.http://game.ceeger.com/Components/class-NavMeshAgent.html

分享到:
评论

相关推荐

    Unity导航网格自动寻路nav mesh

    ### Unity导航网格自动寻路(Nav Mesh)详解 #### 导读 在游戏开发领域,尤其是在3D游戏中,实现角色的自动寻路是一项至关重要的功能。Unity作为一款强大的跨平台游戏引擎,提供了丰富的工具和API来帮助开发者实现...

    Unity3D教程:关于LightMapping和NavMesh烘焙的动态加载2

    在Unity3D开发中,LightMapping和NavMesh烘焙是两个重要的技术,它们分别用于优化光照效果和实现自动路径规划。本教程将介绍如何在Unity3D中实现LightMapping和NavMesh烘焙的动态加载,这对于处理大型游戏项目或网页...

    Unity自动寻路

    Unity 中的自动寻路系统是基于 NavMesh 系统的,它提供了一套成熟的组件来解决自动寻路的问题。通过使用 NavMesh 系统和编写导航脚本,可以实现游戏中的自动寻路功能,提高游戏的玩法和游戏体验。

    unity3D NavMeshExample

    "unity3D NavMeshExample"是一个示例项目,它展示了Unity3D中的NavMesh组件及其相关功能,帮助开发者理解和实现自动寻路。 NavMesh(导航网格)是Unity3D中的核心寻路系统,用于处理角色在3D场景中的路径规划问题。...

    Unity Dots NavMeshQuery寻路列子

    NavMeshQuery寻路系统则是Unity中用于处理游戏角色或物体在3D环境中自动导航的工具。ReeseUnityDemos是一个开源项目,由Reese封装了一个针对Unity Dots的NavMeshQuery寻路实现,为开发者提供了学习和应用的实例。 ...

    NavMeshPlus:Unity NavMesh 2D寻路

    Unity NavMesh 2D寻路 此仓库是2D中Unity NavMesh和寻路概念的证明。 它探讨了NavMeshComponents功能。 ( ) 信息 建立 您可以通过两种不同的方式使用它:下载该存储库或将其添加到项目的Package Manager清单中。 ...

    NavMesh 2D资源包

    《Unity 2D寻路系统:NavMesh 2D资源包详解》 Unity引擎作为一款强大的游戏开发工具,为开发者提供了丰富的功能,其中包括用于2D游戏的寻路系统——NavMesh 2D。这个资源包专门针对2D场景,帮助开发者实现角色在2D...

    unity5圣典中文API手册v0.02.chm

    AccelerationEvent &lt;=&gt; 加速度事件 AnchoredJoint2D &lt;=&gt; 2D锚关节 AndroidInput &lt;=&gt; 安卓输入 AndroidJavaClass &lt;=&gt; 安卓Java类 AndroidJavaObject &lt;=&gt; 安卓Java对象 AndroidJavaProxy &lt;=&gt; 安卓Java代理 ...

    Unity新版NavMesh组件使用文档

    Unity新版NavMesh组件使用文档主要介绍了Unity3D环境中导航网格(Navigation Mesh,简称NavMesh)组件的新功能,特别是在实时烘焙导航网格方面的应用。文档讲解了如何构建NavMesh组件的类型,包括NavMeshSurface、...

    模糊查询.unitypackage

    /// &lt;summary&gt; /// 查询内容 /// &lt;/summary&gt; private InputField queries; /// &lt;summary&gt; /// 所有内容 /// &lt;/summary&gt; private List&lt;string&gt; allStr = new List&lt;string&gt;(); /// &lt;summary&gt; /// 当前查询...

    Unity3D实现NavMesh导航网格寻路

    在Unity3D中,NavMesh(导航网格)是一种强大的工具,用于实现3D游戏环境中的自动寻路功能。这项技术是基于人工智能算法,允许游戏对象(例如角色或敌人)自动规划并沿着可达的路径移动,避开场景中的障碍物。Nav...

    unity绕过障碍物自动寻路

    同时,可以使用Unity的`NavMeshAgent`组件,结合自定义的寻路结果,实现角色的平滑移动。 总的来说,"unity绕过障碍物自动寻路"是一个涉及游戏AI、路径规划和C#编程的综合课题。通过理解和应用A*算法,开发者可以使...

    Navmesh2Rvo

    《Navmesh2Rvo:基于RVO2的高级路径规划技术》 在游戏开发和模拟环境中,路径规划是一项至关重要的任务,它使得虚拟角色能够智能地在复杂环境中移动。Navmesh2Rvo是一个专为此目的设计的模块,它基于RVO2算法,实现...

    NavMesh2D去Linq修改和说明文档

    Unity引擎中的NavMesh2D系统是为2D游戏设计的一种高效寻路解决方案。它允许开发者创建角色在2D环境中的智能移动,通过预计算的导航网格进行路径规划。本文将深入探讨NavMesh2D的核心原理,以及如何对使用Linq的部分...

    A star.zip unity3D 自动寻路算法

    在游戏设计中,自动寻路算法(Pathfinding)是必不可少的一部分,它允许游戏中的角色或NPC(非玩家角色)自动寻找从起点到终点的最佳路径。A*(A-star)算法是一种广泛应用的启发式搜索算法,因其高效性和准确性而被...

    Unity3d-nav-CritterAI

    Unity3d-nav-CritterAI 是一个专门为Unity3D游戏引擎设计的插件,它主要功能是导出Unity内置的NavMesh数据,以便在服务器端进行导航计算。这个插件对于实现多玩家在线游戏或者需要服务器进行路径规划的场景特别有用...

    Unity 5.6 -2017 新版NavMesh案例资源,支持动态烘焙

    Unity新版NavMesh的案例资源,包含代码、案例 最大的亮点在于支持动态烘焙,可用在运行时根据人物的位置来动态烘焙人物周围一定区域内的场景

    Unity自动寻路插件

    Unity自动寻路插件

    获取硬盘序列号、主板ID号等的dll

    &lt;br&gt;使用方法:&lt;br&gt;=========&lt;br&gt;&lt;br&gt;(1) 将 TestEncryDll.scx&lt;br&gt; TestEncryDll.sct&lt;br&gt; REG.DLL&lt;br&gt; 存放于同一目录下.&lt;br&gt; &lt;br&gt;(2) 启动VFP6后转到该目录,其指令和DOS指令相同,如 CD D:\pvfp98\ 。&lt;br&gt; 用 ? ...

Global site tag (gtag.js) - Google Analytics