Unity Navigation寻路系统并画出指引线
前言
寻路系统是游戏中很常用的一个功能,角色要达到某一点,需要系统给出一个路径,这样可以帮助玩家规划出路径,提示玩家到达,这种功能在各种类型的游戏中都有大量的应用
本案例通过Navigation
实现寻路系统的同时使用Line Renderer
组件标识出指示线,最终完成效果图为:
实现过程
1,利用Navigation烘培场景
为了实现自动寻路的功能,首先需要对场景进行基本的设置,以便让系统识别哪些判断哪些是可运动区域,而哪些又是不可运动区域,Navigation
导航系统的判断条件是基于静态物体进行的,如果想对于动态物体进行判断,则需要添加响应的组件。
要将物体设为静态,首先在场景中选中静止地面和障碍物,在Unity编辑器Inspector面板的左上角选择Static选项的倒三角并将Navigation Static勾选上:
接下来进入Navigation面板,进行场景的烘培,从上到下依次点击两个Bake即可,图中的蓝色区域即为角色可移动区域,而非蓝色区域则是不可跨越区域,就是相关的障碍物:
而关于烘培的具体细节可以查看之间的文章:
- unity中Navigation实现自动寻路功能
2,为角色添加响应组件
为了保证角色可以实现寻路和指示线功能,需要添加Nav Mesh Agent
和Line 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寻路系统并画出指引线相关推荐
- Unity导航寻路系统插件--A* Pathfinding Project
Unity的A*寻路是很常用的功能,比如LOL里面的鼠标点击行走,那么一般情况下做这个导航寻路系统的时候会用两种方式去完成,第一种就是Unity里面自带的NavMeshAgent,第二种就是在Unit ...
- 【Unity】游戏寻路系统—NavMesh入门(个人翻译)
以下内容笔者个人翻译自:http://www.theknightsofunity.com/ 游戏中的许多角色经常需要绕过关卡种中的障碍物.正是因为这是一个游戏中非常常见的情形,Unity提供了内置的寻 ...
- Unity:CritterAI与Recast Navigation寻路
Unity的导航信息,可以在客户端使用,也可以导出NavMesh信息后,在服务器端进行加载几何映射,实现在服务器端进行导航,例如KBEngine,摸索了几天,把整个流程搞清楚,CritterAI可以简 ...
- CritterAI插件CritterAI与Recast Navigation寻路
引用: https://www.cnblogs.com/MarkWoo/p/5211035.html Unity中为一个GameObject添加导航信息 首先,需要为GameObject添加一个Nav ...
- Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用
Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用 目录 Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Ava ...
- Unity 导航寻路快速上手
搭建一个基本的寻路系统 寻路角色与场景 创建一个胶囊体作为玩家,添加刚体组件,并且冻结所有旋转和 y 轴的位置: 之后为玩家添加导航网格代理组件,即 NavMeshAgent 添加外部的场景模型(或者 ...
- 3D寻路系统NavMesh-服务端篇
上一节讲到的客户端使用Unity 自带的 NavMesh 来做寻路 3D寻路系统NavMesh-客户端篇.然而,怪物的刷新.移动,和AI是由服务器负责的,怪物的寻路是由服务器控制的,或者像SLG,大地 ...
- unity简单技能系统
unity简单技能系统 类类型概览 CharacterSkillManager 角色技能管理器 挂载在角色 持有SkillData与释放器 通过释放器进行技能释放 SkillDeployer ...
- Unity 3D 动画系统(Mecanim)|| Unity 3D 人形角色动画(Avatar)
Unity 3D 动画系统(Mecanim) Mecanim 动画系统是 Unity 公司推出的全新动画系统,具有重定向.可融合等诸多新特性,可以帮助程序设计人员通过和美工人员的配合快速设计出角色动画 ...
最新文章
- 想轻松入门Python编程,这10个经典案例你还不知道嘛?
- android10位置信息,Android 11 中的位置信息更新
- OpenCV 霍夫圆变换Hough Circle Transform
- eclipse代码补全
- 如何在 Ubuntu 14.04 和 12.04 上测试 systemd
- mysql的建表语句
- ROS 图像相关的命令与应用
- 大数据如何应用在企业人力资源管理
- swift PickerView
- 渗透测试基础-XSS漏洞简析
- rtk采点后如何导入cad_SMT贴片机是如何编程的
- PhotoShop 各历史版本
- 程序员的这些尴尬瞬间,你经历过吗?
- 4399积分小游戏刷分工具帮助
- php 文章分句,php 英文分句/分段落
- Java游戏运行框架
- seo是什么,seo是什么职位缩写
- iOS 应用内购(iAP)
- ubuntu 20.04 安装 gedit
- python基础(一)完结
热门文章
- oracle转当年时间,oracle-20SEP-日期格式转换为9-20,并比较大小
- RAMOS(全内存操作系统)初识----仅供测试
- C语言typedef详解
- Linux grep多个关键字“与”“或”“非”使用详解
- Http 响应码类型汇总
- Ubuntu系统React-native Android开发watchman安装
- MySQL有这一篇就足够了
- 长文对话实录:国内物联网10年沉浮,AIoT技术如何破局?| AIoT+智慧城市峰会
- thinkphp5 获取sql语句
- 微软Windows Phone7超越Android、iOS的五大优势