Unity寻路导航相关组件

  • Navigation面板
  • NavMeshAgent: 寻路导航Player
  • OffMeshLink: 不联通的跳跃点
  • NavMeshObstacle: 导航网格障碍物

  • 导航烘焙
  • 导航区域
  • 设置两个对象之间跳跃功能
  • 导航障碍物

导航烘焙

  1. 选中场景(希望烘焙寻路导航网络的部分),点选Inspector选项卡-Static右下拉三角-勾选NavigationStatic
  2. Navigation-Object,勾选NavigationStatic,Bake
  3. 在寻路物体上挂脚本NavMeshAgent,设置相关属性。
    • Navigation-Object
      • Generate OffMeshLinks:
    • Navigation-Bake
      • Max Slope:最大爬坡度
      • Drop Height:跳下高度
      • Jump Distance:跳跃距离
    • 脚本使用 agent.SetDestination(point)

导航区域

Navigation-Areas可添加自定义area。例如:沼泽,水池,沙地等等,设置cost值。
一个area的cost将在我们寻找代价最小的路径的时 ,作为导航网格代理扮演着决定性的角色。
场景可选择所属区域。
NavMeshAgent参数AreaMask选择能导航的层。

设置两个对象之间跳跃功能

  1. 默认跳跃点
    选中场景(希望烘焙寻路导航网络的部分)设置成 NavigationStatic
    Navigation-Object 勾选GenerateOffMeshLinks
    Navigation-Bake 设置JumpDistance

  2. 自定义跳跃点
    自定义跳跃点,用到组件OffMeshLink
    在自定义的两个点其中一个挂上脚本OffMeshLink,设置Start、End

  3. 更丰富的跳跃动作
    如果希望上升过程丰富一些,比如播放一个爬梯或者飞行的动作,那么完全可以通过脚本来自行控制。
    首先需要放弃勾选行进物体NavMeshAgent组件下的AutoTraverseOffMeshLink选项,然后编写相应脚本来实现移动过程。在脚本中通过访问NavMeshAgent.isOnOffMeshLink成员来判断是否到达起点或终点,如果到达则访问NavMeshAgent.currentOffMeshLinkData成员来取得起点和终点的信息,最后实现自己的移动过程。完成移动后需要调用NavMeshAgent.CompleteOffMeshLink()来结束手动过渡过程。

导航障碍物

动态障碍物挂NavMeshObstacle,不勾选Carve

你可能感兴趣的:(Unity)