插件的github主页 h8man/NavMeshPlus: Unity NavMesh 2D Pathfinding
这个插件是基于新版3D寻路导航制作的,所以你可能需要看一下这篇文章
新旧Navmash 寻路导航组件对比 附使用案例与实用教程链接-CSDN博客
这行代码agent.updateUpAxis = false 一定要为代理单位加上,重要的事情说三遍!
这行代码agent.updateUpAxis = false 一定要为代理单位加上,重要的事情说三遍!
这行代码agent.updateUpAxis = false 一定要为代理单位加上,重要的事情说三遍!
至于不加会发生什么,你可以试试看
0.导入插件和基础说明
该插件只适合用于2D俯视角游戏,类银河恶魔城 或者 横板跳跃游戏 都不建议sh'y该插件,因为比较 大材小用,而且比传统的纯代码要消耗性能
1.前置准备
最好是给一个空物体 挂载 如图两个脚本
其作用分别为:
你必须知道下面的操作,不然可能会出现奇怪的问题
1.在下图中你可以选择地形是基于什么烘焙
2.使surface面向 xy也是必须要点的,不然你的烘焙表面会竖起来
2.导航地形种类组件
如图,该组件需要挂载到你需要的烘焙的地形上,该地形可以是tilemap,也可以是挂载了碰撞器(勾选触发器)的sprite精灵图片,并且可以根据其碰撞器形状选择烘焙的边缘
添加好了就回到Surface组件点击一下Bake
如果没有任何事情发生
1.可以看看地形的组件是否对应Use Geometry的type
2.点击Override Area选择对应的Area种类再试试
3.试试导入3D的寻路导航组件后重新Bake
3.寻路单位
实际上该插件做的就是把导航代理做成了面向XY轴的样子
你需要给寻路的单位挂载一个代理组件,就是3D的代理组件,因为该插件是依托于3D的嘛
编写可能用到的脚本,该插件有一个BUG就是当寻路单位与目标点在同一竖线的时候
目标点垂直运动不会引起寻路单位的追踪,所以需要一个小小的偏移量触发寻路单位的运动
就是脚本中的Destination方法
另外: agent.updateUpAxis = false;必须要这句代码,不然你的寻路单位也会竖起来
public class ai : MonoBehaviour
{
NavMeshAgent agent;
public Transform target;
// Start is called before the first frame update
private void Awake() {
}
void Start()
{
agent = GetComponent<NavMeshAgent>();
agent.updateRotation = false;
agent.updateUpAxis = false;
//agent.updatePosition = false;
}
// Update is called once per frame
void Update()
{
//agent.SetDestination(target.position);
Destination(target.position);
}
/// <summary>
/// 解决同一条直线不追踪的bug
/// </summary>
/// <param name="pos">target</param>
void Destination(Vector3 pos){
float offset = 0.01f;
Vector3 agentPos =(Vector3)(offset*Random.insideUnitCircle) + pos;
agent.SetDestination(agentPos);
}
}
4.不要试图将烘焙表面和代理单位分离
如图所示,烘焙表面就是一张纸片,当你代理单位的框框离开了该烘焙表面就会报错
最后 该插件确实非常简单,所以更多内容可以自行摸索