Navmesh2d插件的简单使用说明
- 2d游戏如何实现寻路算法
- NavMesh2d插件的简单使用方法
-
- 简单实现寻路功能的脚本
-
- Demo寻路效果
-
- 组件属性说明
2d游戏如何实现寻路算法
我们都知道使用Unity开发3D游戏的时候,可以使用原生自带的Navigation组件实现自动寻路导航功能。但是这在开发2d游戏的时候是不支持的,那当我们在开发2的游戏时也有自动寻路功能的需求怎么办?两条路:
-
使用寻路插件
常用的2d寻路插件有:A Pathfinding Project Pro和PolyNav - 2D Pathfinding。但这都是官方收费插件,需要使用正版请到官网Asset Store付费下载,当然也可以从网上淘一淘也能找到这个插件包。本文着重介绍PolyNav - 2D Pathfinding寻路插件的使用,能满足一般的2d游戏寻路需求了,文末附插件下载链接哦!
-
手搓寻路算法
如果使用插件达不到你想要的寻路效果怎么办?或许你有能力可以魔改人家插件代码,以达到你需求;或许你可以参照网上大牛博客写的A*算法,再加以研究,自己手搓一份寻路算法代码咯。
NavMesh2d插件的简单使用方法
创建2d导航网格
-
step1
新建空物体,自己修改物体命名,然后添加【PolyNav2D】组件和2d碰撞器【Polygon Collider2D】。或者依次点击GameObject / Create Other / PolyNav2D完成添加。
-
step2
点击如上图中【1】处编辑导航区域,手动设置多边形可导航区域大小。
勾选【2】处属性,改变时重新烘焙导航数据更新
点击【3】处【Add New Polygon Obstacle】添加障碍区域,点击【Select】可选中编辑禁止区域大小,障碍物可动态添加,点击【Remove】可移除障碍。
【Radius】:设置半径,表示寻路代理从区域边缘处获取的偏移量。
添加寻路组件
step1:为需要寻路的物体添加寻路必要的组件【PolyNavAgent】,设置好参数。
step2:编写自定义的寻路脚本,鼠标点击寻路或者自动路径寻路等等。
简单实现寻路功能的脚本
注:该脚本需挂载到寻路物体身上,且物体需挂载有【PolyNavAgent】组件。
鼠标点击寻路
[RequireComponent(typeof(PolyNavAgent))]
public class MouseClickToMove : MonoBehaviour{
private PolyNavAgent _agent;
public PolyNavAgent Agent{
get
{
if (!_agent)
_agent = GetComponent<PolyNavAgent>();
return _agent;
}
}
void Update() {
if (Input.GetMouseButton(0))
Agent.SetDestination( Camera.main.ScreenToWorldPoint(Input.mousePosition));
}
}
自动路径寻路
[RequireComponent(typeof(PolyNavAgent))]
public class MoveBetween : MonoBehaviour{
public List<Vector2> WPoints = new List<Vector2>();
private PolyNavAgent _agent;
public PolyNavAgent agent{
get
{
if (!_agent)
_agent = GetComponent<PolyNavAgent>();
return _agent;
}
}
void OnEnable(){
agent.OnDestinationReached += MoveRandom;
agent.OnDestinationInvalid += MoveRandom;
}
void OnDisable(){
agent.OnDestinationReached -= MoveRandom;
agent.OnDestinationInvalid -= MoveRandom;
}
IEnumerator Start(){
yield return new WaitForSeconds(1);
if (WPoints.Count > 0)
MoveRandom();
}
void MoveRandom(){
agent.SetDestination(WPoints[Random.Range(0, WPoints.Count)]);
}
}
Agent.stop();
Demo寻路效果
效果gif:
demo插件下载
PolyNav2D寻路插件
组件属性说明
属性 | 说明 |
---|
Max Speed | 移动的最大速度 |
Mass | 代理的质量,质量越大,惯性越大 |
Stopping Distance | 代理物体到达目标点的距离 |
Slowing Distance | 设置代理从目标开始减速的距离 |
Deceleration Rate | 代理在达到目标时减速的速率。 |
Rotate Transform | 是否旋转 |
Rotate Speed | 勾选旋转时的旋转速度 |
Avoid Radius | 是代理与其他代理的回避半径。如果你不需要回避,把它留在0。 |
Look Ahead Distance | 是当代理看到障碍物或其他代理具有回避半径时,代理向前看的距离。您可以将此值设置为0,以禁用障碍和代理向前查看并提高性能。 |
Repath | 如果启用,地图改变上将重新评估路径。为了性能,一般禁用掉 |
Restrict | 如果启用,将强制代理位置在有效区域内。 为了性能,一般禁用掉 |
Closer Point On Invalid | 如果请求的目标无效,将使代理转到更接近可能的位置。 |
Debug Path | 如果选中,将绘制路径。可以在scene视图里观看 |
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)