VR开发实战之Navigation寻路

一.什么是寻路?

寻路顾名思义就是:角色在到达指定地点的过程中遇到障碍物会自动避开并自行选取最短的路程进行移动。大多数的游戏中都会有自动越过障碍物与自动寻路的功能,点击场景上的一个位置,角色就会自动寻路过去。中间可能会有很多的障碍物,角色会自动绕过障碍物,最终达到终点。

二.使用寻路的方法:

第一种比较传统的是使用A星寻路插件,它是一种比较传统的人工智能算法,在Unity还没有Navigation寻路系统的时候最常被使用的一种方法第二种就是通过Unity自带的Navigation寻路系统,添加脚本控制角色的自动避让障碍物和寻路
自动避让障碍物

一. 添加一块Plane地板和一个胶囊体 Capsule(作为角色Player),给胶囊体添加Character Controller角色控制器 , 在Mesh F的Mesh改为None后会发现,胶囊体变成了一个如鸟笼般的网格状物体,这便是角色控制器
二.添加一块Cube拉升后变成一面墙体,我们要实现的功能就是点击对面的地面,胶囊体可以绕过墙到达指定地点
三.在Window中添加Navigation
四.给角色添加Nav Mesh Agent
五.将Plane和Cube的static勾选为两个Static
六.给角色(胶囊体)添加脚本控制移动
private NavMeshAgent agent;
void Start () { 
agent = transform.GetComponent<NavMeshAgent>();
}
void Update () {
 if (Input.GetMouseButtonDown(0)) { 
Ray r = Camera.main.ScreenPointToRay(Input.mousePosition); 
RaycastHit hit;
  if (Physics.Raycast(r, out hit)) { 
 if (!hit.collider.name.Equals("Player")) { 
 Vector3 p = hit.point; agent.SetDestination(p);
      } 
     } 
   }
  }
 }
七.给Cube和面板进行烘焙
八.给面板的tag更改为Player(因为在角色的脚本中判断了对象的.name.Equals是否为“Player”)

现在点击播放,这时就能实现物体在进行移动到达指定地点的途中遇到障碍物会自动避让了


自动寻路

在原有的基础上再复制一块Plane面板,将Bake下的Jump Distance和Drop height更改数值(根据制作的面板的距离自行更改)进行烘焙(注意如果不是复制的Plane面板而是重新创建的话,需要注意新面板的Static、Tag是否为Player和是否勾选Object)



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、什么是寻路? 寻路顾名思义就是:角色在到达指定地点的过程中遇到障碍物会自动避开并自行选取最短的路程进行移动。大...
    李昀熹1112阅读 428评论 0 0
  • unity自从3.5版本之后,增加了NavMesh寻路的功能。在此之前,unity用户只能通过第三方插件(如Ast...
    壹米玖坤阅读 8,506评论 0 10
  • 一、Unity简介 1. Unity界面 Shift + Space : 放大界面 Scene界面按钮渲染模式2D...
    MYves阅读 8,446评论 0 22
  • 角色控制是游戏设计中必不可少的一个设计环节,这一节我们讲一讲如何制作基本的角色运动控制交互逻辑。 因为是简单实例教...
    shimmery阅读 9,574评论 5 20
  • 前言:在学习完网格导航之后,我们做一个涉及到网格导航的综合练习,涉及到前面学习的动画以及角色控制器等内容,废话不多...
    Joe_Game阅读 306评论 0 0