前言

寻路系统是游戏中很常用的一个功能,角色要达到某一点,需要系统给出一个路径,这样可以帮助玩家规划出路径,提示玩家到达,这种功能在各种类型的游戏中都有大量的应用

本案例通过Navigation实现寻路系统的同时使用Line Renderer组件标识出指示线,最终完成效果图为:

实现过程

1,利用Navigation烘培场景

为了实现自动寻路的功能,首先需要对场景进行基本的设置,以便让系统识别哪些判断哪些是可运动区域,而哪些又是不可运动区域,Navigation导航系统的判断条件是基于静态物体进行的,如果想对于动态物体进行判断,则需要添加响应的组件。

要将物体设为静态,首先在场景中选中静止地面和障碍物,在Unity编辑器Inspector面板的左上角选择Static选项的倒三角并将Navigation Static勾选上:

接下来进入Navigation面板,进行场景的烘培,从上到下依次点击两个Bake即可,图中的蓝色区域即为角色可移动区域,而非蓝色区域则是不可跨越区域,就是相关的障碍物:

而关于烘培的具体细节可以查看之间的文章:

  • unity中Navigation实现自动寻路功能

2,为角色添加响应组件

为了保证角色可以实现寻路和指示线功能,需要添加Nav Mesh AgentLine Renderer两个组件:

首先对于Nav Mesh Agent的参数调整,要实现可角色的路径设置,本案例而对于该组件的参数调整主要是两方面,第一是其速度Speed,设置数值大小可以改变移动速度的大小,另一点则是加速度,在目标发生改变时,速度改变的大小

对于第二个组件Line Renderer是本案例的重点,其主要功能就是用来在三维场景中画出线条,通过使用这一特性,可以描绘出角色将要移动的路径,这样就可以实现物体的导航功能

关于LIne Randerer

  • Line Renderer 组件在三维空间中接受两个或多个点的数组,并在每个点之间绘制一条直线。你可以使用直线渲染器绘制任何东西,从简单的直线到复杂的螺旋线。线总是连续的; 如果你需要画两个或更多完全独立的线,你应该使用多个游戏对象,每个都有自己的线渲染器。线条渲染器不呈现像素宽度的线条。它渲染的多边形有一个世界单位宽度。线条渲染器使用与 Trail 渲染器相同的线条渲染算法。

在本案例中,我们在添加该组件后,首先需要为其添加材质,可以在Materials设置材质的数量,并为其添加材质,并在width中调整其宽度,具体调整如图:

3,编写脚本调用两个组件实现导航

通过脚本调用连个组件,首先使用各自的方法完成各自的功能,使用Navigation结合射线检测碰撞来完成角色移动到点击的位置,而Line Renderer组件则在获取的一系列的点之间画出线,而完成两者之间的结合则是需要通过Navigation组件的指定函数来获取到导航时转弯的一系列的点位,并将其指定给Line Renderer,这样就完成了画线功能:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;public class FindRode : MonoBehaviour
{private NavMeshAgent agent;private LineRenderer line;// Start is called before the first frame updatevoid Start(){agent = GetComponent<NavMeshAgent>();line = GetComponent<LineRenderer>();        }// Update is called once per framevoid Update(){if(Input.GetMouseButtonDown(1)){Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);RaycastHit hit;if(Physics.Raycast(ray,out hit,500)){if(hit.transform.tag=="ground"){agent.SetDestination(hit.point);}}}//如果导航里面的点大于1if(agent.path.corners.Length>1){//画线的点位等于导航的点位line.positionCount = agent.path.corners.Length;line.SetPositions(agent.path.corners);}}
}

两者之间的结合在If判断里面,我们可以通过agent.path.corners.Length属性来知道需要画出线的点位个数,并通过SetPositions()可以获取所有坐标的数组,这样就可以实现在相邻两个点之间进行画线

Unity Navigation寻路系统并画出指引线相关推荐

  1. Unity导航寻路系统插件--A* Pathfinding Project

    Unity的A*寻路是很常用的功能,比如LOL里面的鼠标点击行走,那么一般情况下做这个导航寻路系统的时候会用两种方式去完成,第一种就是Unity里面自带的NavMeshAgent,第二种就是在Unit ...

  2. 【Unity】游戏寻路系统—NavMesh入门(个人翻译)

    以下内容笔者个人翻译自:http://www.theknightsofunity.com/ 游戏中的许多角色经常需要绕过关卡种中的障碍物.正是因为这是一个游戏中非常常见的情形,Unity提供了内置的寻 ...

  3. Unity:CritterAI与Recast Navigation寻路

    Unity的导航信息,可以在客户端使用,也可以导出NavMesh信息后,在服务器端进行加载几何映射,实现在服务器端进行导航,例如KBEngine,摸索了几天,把整个流程搞清楚,CritterAI可以简 ...

  4. CritterAI插件CritterAI与Recast Navigation寻路

    引用: https://www.cnblogs.com/MarkWoo/p/5211035.html Unity中为一个GameObject添加导航信息 首先,需要为GameObject添加一个Nav ...

  5. Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用

    Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用 目录 Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Ava ...

  6. Unity 导航寻路快速上手

    搭建一个基本的寻路系统 寻路角色与场景 创建一个胶囊体作为玩家,添加刚体组件,并且冻结所有旋转和 y 轴的位置: 之后为玩家添加导航网格代理组件,即 NavMeshAgent 添加外部的场景模型(或者 ...

  7. 3D寻路系统NavMesh-服务端篇

    上一节讲到的客户端使用Unity 自带的 NavMesh 来做寻路 3D寻路系统NavMesh-客户端篇.然而,怪物的刷新.移动,和AI是由服务器负责的,怪物的寻路是由服务器控制的,或者像SLG,大地 ...

  8. unity简单技能系统

    unity简单技能系统 类类型概览 CharacterSkillManager      角色技能管理器 挂载在角色 持有SkillData与释放器 通过释放器进行技能释放 SkillDeployer ...

  9. Unity 3D 动画系统(Mecanim)|| Unity 3D 人形角色动画(Avatar)

    Unity 3D 动画系统(Mecanim) Mecanim 动画系统是 Unity 公司推出的全新动画系统,具有重定向.可融合等诸多新特性,可以帮助程序设计人员通过和美工人员的配合快速设计出角色动画 ...

最新文章

  1. 想轻松入门Python编程,这10个经典案例你还不知道嘛?
  2. android10位置信息,Android 11 中的位置信息更新
  3. OpenCV 霍夫圆变换Hough Circle Transform
  4. eclipse代码补全
  5. 如何在 Ubuntu 14.04 和 12.04 上测试 systemd
  6. mysql的建表语句
  7. ROS 图像相关的命令与应用
  8. 大数据如何应用在企业人力资源管理
  9. swift PickerView
  10. 渗透测试基础-XSS漏洞简析
  11. rtk采点后如何导入cad_SMT贴片机是如何编程的
  12. PhotoShop 各历史版本
  13. 程序员的这些尴尬瞬间,你经历过吗?
  14. 4399积分小游戏刷分工具帮助
  15. php 文章分句,php 英文分句/分段落
  16. Java游戏运行框架
  17. seo是什么,seo是什么职位缩写
  18. iOS 应用内购(iAP)
  19. ubuntu 20.04 安装 gedit
  20. python基础(一)完结

热门文章

  1. oracle转当年时间,oracle-20SEP-日期格式转换为9-20,并比较大小
  2. RAMOS(全内存操作系统)初识----仅供测试
  3. C语言typedef详解
  4. Linux grep多个关键字“与”“或”“非”使用详解
  5. Http 响应码类型汇总
  6. Ubuntu系统React-native Android开发watchman安装
  7. MySQL有这一篇就足够了
  8. 长文对话实录:国内物联网10年沉浮,AIoT技术如何破局?| AIoT+智慧城市峰会
  9. thinkphp5 获取sql语句
  10. 微软Windows Phone7超越Android、iOS的五大优势