【Unity3D日常开发】(二)自动寻路系统Navigation之实现自动寻路并且动态显示路线
推荐阅读
一、前言
今天实现,在Unity3d中实现点击目标点,然后出现引路线段,动态更新线段等功能。
效果图如下图所示:
二、主要组件
NavMeshAgent
参数就不全部说明了,就说几个重要的吧
Steering->Speed
<1>这个是设置自动寻路的速度的,可以把这个值设置成0,然后就会光显示路线,而不自动寻路了。
<2>也可以随便设置一个值,然后就会显示路线,而且还会自动寻路
Steering->Stopping Distance
<1>这个的话就是寻路到目标点之后,距离目标点还有多少的距离,也就是停止距离
<2>如果目标点有碰撞体的话最后把这个值调大一点,不然会一直寻路,往这个方向挤
Path Finding->Area Mask
<1>可以行走的区域,这个再配合
这2个使用。先添加Areas层,然后在Object->Navgation Area->设置Areas层
<2>这个可以运用到dota游戏中,小兵自动3路寻路
LineRenderer组件
这个的话主要是用来在Game视图中画线段
首先要设置一下
LineRenderer->Materials
材质要设置一下,不然会显示材质丢失,就是那个紫色的一团
LineRenderer->Parameters->StartWidth
LineRenderer->Parameters->EndWidth
这两个是设置开始宽度和结束宽度。如果先要让线段粗一点可以设置值大一些
三、实现
代码:
using UnityEngine;
using System.Collections;
public class Nav : MonoBehaviour
{
private NavMeshAgent agent;
public Transform target;
private LineRenderer lineRenderer;
// Use this for initialization
void Start()
{
agent = GetComponent<NavMeshAgent>();
lineRenderer = gameObject.GetComponent<LineRenderer>();
}
// Update is called once per frame
void Update()
{
//设置自动寻路的目标点
agent.SetDestination(target.position);
//储存自动寻路的点的坐标
Vector3[] path = agent.path.corners;
//线段整体y轴加1个单位
for (int i = 0; i < path.Length; i++)
{
path[i] = path[i] + new Vector3(0, 1, 0);
}
//设置定点的数量
lineRenderer.SetVertexCount(path.Length);
for (int i = 0; i < path.Length; i++)
{
//设置线段的路劲
lineRenderer.SetPosition(i, path[i]);
}
}
}
需要现在场景中烘培出来路径,然后在对象上加上NavMeshAgent组件和LineRenderer组件
Agent Type
自动寻路的类型
Base Offset
基本偏移,碰撞几何体相对于实际几何体垂直的偏移
Speed
移动的速度,这个数值越大移动的速度越快
Angular Speed
转角的移动速度
Acceleration
加速度
Stopping Distance
停止的间隔,在离目标点多远的距离停下来的意思
Auto Braking
自动停止
Radius
自动寻路的半径,可以与实际物体半径不一致
Height
自动寻路的高度,可以与实际物体高度不一致
Quality
躲避的等级,等级越高躲避越好,相对于计算量也会大一些
Auto Traverse OffMesh
自动穿过OffMesh
Auto Repath
自动重复
Area Mask
就是当前对象可以通过的网格路径,这个是在Naviagtion中设置
四、Line Renderer组件
这个就介绍几个比较重要的属性吧
Materials
这个是设置线段的材质,这个不设置的话就会显示成紫色(就是材质丢失的状态)
Width
就是线段的宽度
Positions
这个就是设置线段的路径的
- 点赞
- 收藏
- 关注作者
评论(0)