Unity中的导航系统

这篇具有很好参考价值的文章主要介绍了Unity中的导航系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1.生成导航网格

选择菜单栏中的Windows - Navigation

Unity中的导航系统,Unity,unity,游戏引擎

打开后会出现以下面板

Navigation面板 

1.Object 

Unity中的导航系统,Unity,unity,游戏引擎

需要你在场景中选择一个带有网格渲染的游戏对象或者地形

我们在场景中添加一个cube,并点击它。

Unity中的导航系统,Unity,unity,游戏引擎

然后我们把Navigation Static给勾选上

Navigation Static

选择你想要使用的物体,把他们标记为‘导航静态(Navigation static)’这就会告诉Unity这些物体是静态的(非移动),在寻路的时候应该被考虑进去。

这个就是Navigation有关Object这一块,还有Generate OffMeshLinks和Navigation Area后面会讲。 

 2.Agents

Unity中的导航系统,Unity,unity,游戏引擎

agents也就是我们的导航代理,是个圆柱体。

Name:名字

Radius:半径

Height:高度

Step Height:每一步的高度

Max Slope:可以通过的斜坡的倾斜角,范围在0到60度

3.Areas

 Unity中的导航系统,Unity,unity,游戏引擎

我们可以设置一些新的Area,右边那个值我们称为该层的行走代价(Cost),Cost值越大,行走的代价越高。

这个就可以用到,当有两条路径进行选择的时候,我们可以通过设置两个不同Cost的Area,让物体走向指定路径

设置的话在Object的Navigation Area上就可以选择(和inspector窗口的layer以及tag是一个用法)

Unity中的导航系统,Unity,unity,游戏引擎

4.Bake

Unity中的导航系统,Unity,unity,游戏引擎

Bake烘培参数面板

  • Radius:导航代理的半径,半径越小生成的网格面积越大。
  • Height:导航代理的高度。
  • Max Slope:导航代理能够行走的斜坡的最大坡度(最大60度)
  • Step Height:导航代理一步能跨越的台阶高度
  • Drop Height:地形网格的高度差,低于此值,导航代理可以跳落
  • Jump Distance:允许最大的跳跃距离。

单击该面板右下角的Bake按钮,就可以生成导航网格。

eg:

Unity中的导航系统,Unity,unity,游戏引擎

接着我们通过一个案例来简单讲讲使用: 

 案例1:通过鼠标点击实现移动到目标点

Unity中的导航系统,Unity,unity,游戏引擎

我们先来搭建一个这样的场景,一个Plane,两个蓝色的Cube作为障碍物,红色Cube是通过导航网络移动的物体,还有一个小球作为目标点。

我们先来实现通过导航到达小球位置。

将Plane还有两个障碍物的Navigation Static给勾选上,在点击Bake,就可以生成导航网络

Unity中的导航系统,Unity,unity,游戏引擎

导航网络建好后,我们选择需要寻路的物体,添加Nav MeshAgent组件。

Unity中的导航系统,Unity,unity,游戏引擎

Radius:物体的半径
Speed:物体的行进最大速度
Acceleration:物体的行进加速度
Augular Speed:行进过程中转向时的角速度。
Stopping Distance:离目标距离还有多远时停止。 

然后再添加一个脚本Cubenav

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;//NavMeshAgent所需要的命名空间
public class cubenav : MonoBehaviour
{
    private NavMeshAgent agent;
    public GameObject target;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        agent.destination = target.transform.position;
    }
}

 运行结果:

Unity中的导航系统,Unity,unity,游戏引擎

 接着我们再实现鼠标点击的效果

我们改一下代码就行了,这里通过射线的方式实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;//NavMeshAgent所需要的命名空间
public class cubenav : MonoBehaviour
{
    private NavMeshAgent agent;
    public GameObject target;
    // Start is called before the first frame update
    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    // Update is called once per frame
    void Update()
    {
        //agent.destination = target.transform.position;
        if (Input.GetMouseButton(0))
        {
            Ray ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit info;
            if (Physics.Raycast(ray, out info))//判断射线释放与碰撞器接触
            {
                if (info.collider.gameObject.tag == "floor")//将plane的tag设置为floor
                {
                    agent.destination = info.point;//RaycastHit类的point会返回射线碰到碰撞器的碰撞点
                }
            }
        }
    }
}

运行结果:

Unity中的导航系统,Unity,unity,游戏引擎

 OffMeshLinks:分离网格链接

分离网格链接用在不相连的导航区域间创建路径。

Unity中的导航系统,Unity,unity,游戏引擎文章来源地址https://www.toymoban.com/news/detail-775119.html

使用:

将两个plane的Generate OffMeshLinks勾选上

Unity中的导航系统,Unity,unity,游戏引擎

根据Bake中的这两个参数(如果两个plane满足这个条件),就可以Bake出分离网格链接

 Unity中的导航系统,Unity,unity,游戏引擎

Unity中的导航系统,Unity,unity,游戏引擎 这种方式会给出很多路径

如果想要单一路径的话

我们可以创建三个空对象

Unity中的导航系统,Unity,unity,游戏引擎

把start和end的position分别设置为两个平台的指定位置

再在link上添加Off Mesh Link组件,把start和end分别拖拽进来,再重新Bake(如果没反应,有可能是重合了,就调一下Bake中的那两个参数,使这两个平台不满足要求,这样我们看的也清楚一些)

Unity中的导航系统,Unity,unity,游戏引擎

这样就算不勾选上Generate OffMeshLinks,也能生成唯一的分离网格链接

Unity中的导航系统,Unity,unity,游戏引擎

到了这里,关于Unity中的导航系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 游戏开发之Unity2021智能导航地图烘焙

    单独调整移动某一颗树或者其它东西的时候可以按住 Ctrl+shift ,可以帮助我们自动吸附到某一个表面上  调出智能导航的面板,选择窗口,选择AI,选择导航 将地面设置为静态的,否则就不能进行烘焙,在导航中选择对象,选择可移动的 在导航中选择烘焙,选择bake  bake完之

    2024年02月10日
    浏览(48)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(73)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(72)
  • Unity、UE、Cocos游戏开发引擎的区别

    Unity、Unreal Engine(UE)和Cocos引擎是三个常用的游戏开发引擎,它们在功能和特性上有一些区别。以下是它们之间的主要区别: 编程语言:Unity使用C#作为主要的编程语言,开发者可以使用C#脚本进行游戏逻辑编写。Unreal Engine主要使用C++作为编程语言,但也支持蓝图系统,允许

    2024年02月22日
    浏览(62)
  • Unity vs Godot :哪个游戏引擎更适合你?

    游戏引擎的选择对开发过程和最终产品质量有着重大影响。近年来,Godot和Unity这两款引擎受到广泛关注。本文将从多个维度对两者进行比较,以期为开发者提供正确的选择建议。 Godot和Unity都有各自的优势,没有绝对的好坏之分。Godot开源免费,上手简单,更适合2D和小型游戏

    2024年01月23日
    浏览(93)
  • 30分钟了解所有引擎组件,132个Unity 游戏引擎组件速通!【收藏 == 学会】

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 🌲Unity实战100例专栏推荐:Unity 实战100例 教程 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长

    2024年02月11日
    浏览(69)
  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(121)
  • GODOT游戏引擎简介,包含与unity性能对比测试,以及选型建议

    GODOT,是一个免费开源的3D引擎。本文以unity作对比,简述两者区别和选型建议。由于是很久以前写的ppt,技术原因视频和部分章节丢失了。建议当做业务参考。 GODOT目前为止遇到3个比较重大的机遇,第一个是oprea的合作奖,第二个是用支持c#换来的微软的投资,第三个是虚幻

    2024年02月14日
    浏览(79)
  • Unity和UE4两大游戏引擎,你该如何选择?

    目录 游戏引擎 2 —— 难易区别 编程语言 3 —— 游戏产品 UE4制作的游戏产品  Unity制作的游戏产品  产品类型 5 —— 资源商店 6 —— 人才需求 平均薪资 总结      Unity和UE4都是游戏引擎,所谓游戏引擎就是集成了复杂功能的游戏开发软件,他们帮我们实现了复杂的底层逻

    2023年04月08日
    浏览(69)
  • Unity——脚本与导航系统

    Unity内置了一个比较完善的导航系统,一般称为Nav Mesh(导航网格),用它可以满足大多数游戏中角色自动导航的需求。 Unity的导航系统由以下几个部分组成: Nav Mesh。Nav Mesh与具体的场景关联,它定义了场景中可以通过的三角面和非三角面的通路。Unity可以自动构建出Nav Mes

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包