Unity3D】unity导航路线如何实现

2021-01-28 17:03发布

4条回答
Ross
2楼 · 2021-02-01 18:38

在脚本中获取导航网格代理组件,然后使用方法SetDesinitation(目标位置)即可实现自动导航.

小狮子
3楼 · 2021-02-22 14:33

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

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

1.在Scene中新建三个Cube,如下图摆放。

2.选中上图三个Cube,并在Inspector面板中选中为静态(static)下拉选项的Navigation Static,如下图。

3.依次选择菜单栏中的Windows - Navigation ,打开后面板如下。

单击该面板右下角的Bake按钮,即可生成导航网格,下图为已生成的导航网格。

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

首先新建一个Cube为目标位置,起名TargetCube。然后创建一个capsule(胶囊)运动体,为该胶囊挂在一个Nav Mesh Agent(Component - Navigation - Nav Mesh Agent);最后写一个脚本就可以实现自动寻路了。脚本如下:

复制代码


复制代码

脚本新建完成后挂载到胶囊体上,然后将TargetCube赋予给胶囊体的Run脚本,运行场景,如下图,胶囊体会按照箭头的方向运动到Cube位置。

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

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

Navigation

  1. Object:物体参数面板

    • Navigation Static:勾选后表示该对象参与导航网格的烘培。

    • OffMeshLink Generation:勾选后可跳跃(Jump)导航网格和下落(Drop)。

  2. 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:该物体可以行进的网格层掩码。


蜗牛
4楼 · 2021-02-24 09:22

一楼和二楼回答的很是详尽

如果楼主想要描绘出导航路径的话,那么可以使用LineRender组件,

Mantra
5楼 · 2021-03-17 10:27

如果是使用Unity自带的导航功能,实现步骤是这个样子的。

首先选择物体,勾选Navigation Static

之后在Windows>Navigation中进行烘焙

之后在脚本中借助SetDestination移动到目标位置。

相关问题推荐

  • 回答 17

    还是要学好编程基础呀如果你觉得编程很苦难 不一定要从c#开始学  学学js flash as等等  有个梯度就好多了如果要用好unity  不会编程那是不行的  学习的过程中都有个头疼的过程  记住  头越痛  代表你要接受的东西越多  坚持 你的大脑在和知识兼容中:D...

  • unity如何自学Unity3D 2022-01-06 15:24
    回答 18

    可以先思考学习的目的,是什么因素在驱动你。是完成一款作品?进入某个行业?还是探究某类问题?否则和技术相关的知识浩如烟海,很容易迷失在细枝末节上。而要找到动力源头。个人的经验,就是关注一些和自己同方向,同类型的创作者。他们输出的作品会激励你,...

  • 回答 23

    可以让模型师直接作出这样的形状,如果用纯Unity制作,就要用基本游戏对象拼接了,包括楼梯,城堡,都可以拼接出来。正常情况不会这样做,因为不够精美,都是建模师来实现,毕竟Unity不属于专业的建模软件,侧重于实现功能。...

  • 回答 2

    Shader Unlit/Test{Properties{_MainTex(MainTex,2D)=white{}_MainColor(MainColor,COLOR)=(1,1,1,1)_AddTex(AddTex,2D)=white{}_Maxset(Max,Range(0.1,1.0))=0.1}SubShader{Tags{RenderType=Transparent Queue=Tran...

  • 回答 4

    文章主要为大家详细介绍了Unity Shader实现水波纹效果,文中示例代码介绍的非常详细具体代码实现如下:Shader Custom/shuibowen{ Properties{ _MainTex(Base (RGB),2D)=white{} _distanceFactor(Distancefactor,float)=1 _timeFactor(time factor,float)=...

  • 回答 7

    策划的最基本的原则就是:改进缺点,做别人没有做到的。无论游戏策划还是其它策划都是一样!    游戏策划的第二个原则:放飞思想。也许你认为我是说策划们应该充满想象力,能想一些匪夷所思的东西!对不起。不是这意思!一个合格的策划不是为了发泄自己的...

  • 回答 7
    已采纳

    可以多玩一些其它的游戏,看一些科幻电影等,寻找灵感。

  • 回答 3
    已采纳

    游戏架构与设计不纯粹是一门科学,它不需要提出假设或探究真理,也不被逻辑或正规方法的严格标准所束缚。游戏的目的就是通过玩来获得娱乐,因此游戏设计即需要艺术家一样的创造力,也需要工程师一样的精心规划。游戏设计是一门手艺,就像好莱坞的电影摄像或服...

  • 回答 5

    void Update(){          transform.rotation = Quaternion.Euler(Vector3.zero);}可以试一下,保证物体x轴和z轴为0就可以使其一直垂直。

  • 回答 3

    界面左右移动、上下移动。。本质都是:手指滑动。。。可以参考这些:https://www.cnblogs.com/coldcode/p/5362537.htmlhttps://blog.csdn.net/totosj/article/details/80112852https://blog.csdn.net/zcc858079762/article/details/85253120...

  • 回答 6

    首先新建一个C#脚本,命名为MyFollow,然后把以下代码粘贴进去,保存:AخA 1using UnityEngine;2using System.Collections;3public class MyFollow : MonoBehaviour4{5    public float distanceAway = 5;          // distance...

  • 回答 5

    安装高通的Vuforia插件即可。

  • 回答 5

    不可以,只能一个工程打一个包。

  • 回答 2

    Edit->Project Settings->Graphics 找到Shader Stripping 中fog mode设置为custom(原来是Automatic),然后选中你想要的模式,最后重新打包就ok

  • 回答 2

    用到的插件:System.Drawing.dllSystem.Windows.Forms.dllSystem.Deployment.dll(运用基于.Net4.x的dll打包时,需要用到该dll,否则会报错)代码如下:using System;using System.Runtime.InteropServices;using UnityEngine;using UnityEngine.UI; p......

  • 回答 6

    如下图,设置为none,然后删掉滑动条就可以了。

没有解决我的问题,去提问