• Unity之3D物理导航系统


    一 介绍

    Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路,比如可以制作点击某个位置,让角色自动的绕开障碍走到目标点的效果,比如可以制作敌人AI,让它可以通过NavMesh绕开障碍追击我方单位。甚至可以在NavMesh中设置传送门,跳跃的起点落点,让这些效果也参与寻路的计算,成功计算出导航的捷径

    二  创建3D项目

    2.1 新建核心3D模板

    2.2 新建Plane当作地面

    2.3 新建立方体当角色

    2.4  开启物理导航组件,窗口->包管理器->unity注册表

    2.5 给角色添加网格导航,Nav Mesh Agent选项

     

    2.6 把地面组件勾选静态

    2.7 找到导航系统,烘培地面Window-->AI-->Navigation

     

    2.8 编写脚本,新建C#脚本文件

    2.9 拖动挂载到角色上面,双击打开VS编辑

    1. using System.Collections;
    2. using System.Collections.Generic;
    3. using UnityEngine;
    4. using UnityEngine.AI;
    5. public class NewBehaviourScript : MonoBehaviour
    6. {
    7. private NavMeshAgent agent;
    8. void Start()
    9. {
    10. agent = GetComponent();
    11. }
    12. RaycastHit hit;//碰撞体
    13. // Update is called once per frame
    14. void Update()
    15. {
    16. if (Input.GetMouseButtonDown(0))
    17. {
    18. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    19. if (Physics.Raycast(ray, out hit))
    20. {
    21. agent.SetDestination(hit.point);
    22. }
    23. }
    24. }
    25. }

    2.10 保存,返回Unity运行,这个时候就能点击鼠标,物体自动移动到鼠标位置

    三 导航系统参数介绍

    3.1 Unity 3D 导航系统由 1个Navigation总控制面板 和 3个组件 组成,该系统是由 A*算法 延伸扩展实现的,由4部分组成,分别是 Agents,Areas,Bake,Object

    3.2 常用的导航组件是自动寻路组件,障碍物组件,跳跃组件,如下图

    3.3 Agents面板,导航参数设置

    • Name:设置烘焙 Agents 的名字。
    • Radius:烘焙的半径,也就是对象烘焙的半径。这个值影响对象能通过的路径的大小,值越小,能行走的路径越大,边缘区域越小。
    • Height:具有代表性的对象的高度,可以通过的最低的空间高度。值越小,能通过的最小高度越小。
    • Step Height:梯子的高度。需要根据模型阶梯的高度设置。

    Max Slope:烘焙的最大角度,即坡度。

    3.4 Areas面板,层设置,该面板可以设置在自动寻路时,对象可以通过那些层。 这里输入的名称会在 Object 面板的 Navigation Area 下显示

    3.5 Bake面板(烘焙导航网格

    • Agent Radius:具有代表性的对象的半径,半径越小生成的网格面积越大。
    • Agent Height:具有代表性的对象的高度。
    • Max Slope:斜坡的坡度。
    • Step Height:台阶的高度。
    • Drop Height:允许最大的下落距离。
    • Jump Distance:允许最大的跳跃距离。
    • Min Region Area:网格面积小于该值则不生成导航网格。
    • Height Mesh:勾选后会保存高度信息,同时会消耗一些性能和存储空间。

    3.6 Object面板,对象

    在该面板中可以选择,设置要参与导航网格烘焙的对象,可以设置对象是可以被自动寻路的,如路面。也可以设置对象是不可以被自动寻路的(即不可行走),如湖面

    • Generate OffMeshLinks:设置地面可跳跃。
    • Navigation Area:设置对象以特定的路线寻路。

    四 各导航组件属性介绍

    4.1 Nav Mesh Agent,自动寻路组件

    • Agent Type:寻路类型,可以在 Navigation 总控制面板中设置类型。
    • Base Offset:偏移值。值越大越容易寻路,但是目标会偏移得越远。
    • Speed:对象自动寻路的速度。
    • Angular Speed:对象自动寻路的转弯速度。
    • Acceleration:加速度。
    • Stopping Distance:对象停下的距离。如果值设置为0,则在距离目标点为0处停下
    • Auto Braking:是否自动停下。
    • Radius:对象躲避障碍物的半径。大于这个半径无法躲避障碍物。
    • Height:对象躲避障碍物的等级。等级越高,躲避障碍物越准确。
    • Priority:优先级。值越大,障碍物躲避越优先。
    • Auto Traverse Off Mesh Link:自动跳跃链接。
    • Auto Repath:自动复制路径。
    • Area Mask:能通过的Mask层,可以配合 Navigation 组件中的 Areas 使用。

    4.2 Nav Mesh Obstacle,障碍物组件

    • Shape:障碍物的形状。
    • Center:障碍物的中心点坐标。
    • Size:障碍物的大小。
    • Carve:障碍物的网格。  

    4.3 Off Mesh Link,跳跃组件

    • Start:跳跃的开始点。
    • End:跳跃的结束点。
    • Cost Override:是否计算路径开销,即是否将寻路计入寻路距离。
    • Bi Directional:开始点和结束点是否可以互跳。
    • Activated:是否激活。
    • Auto Update Position:自动更新位置坐标。
    • Navigation Area:可以寻路的层。
  • 相关阅读:
    【技术驿站】分布式基础与常见面试问题
    加菲猫卡丁车:激情竞速 Mac(卡通赛车竞速游戏)原生版
    JavaScript中的Null+浮点数你了解多少?
    UDP聊天室项目
    2022年,谁才是编程语言中的天选之子?
    【C语言】预处理超级详细解析
    The DAO众筹事件与以太坊分叉
    通付盾APP尽职调查报告:守护移动应用安全新篇章
    Opensips安装配置(以下操作均已centOS 6.3系统为准)
    SpringBoot SpringBoot 运维实用篇 2 配置高级 2.1 临时属性
  • 原文地址:https://blog.csdn.net/qq_29848853/article/details/132748162