由于写A*算法有点麻烦,所以我使用了一个开源的插件NavMeshPlus
在PackageManage里输入GitHub上的url:
https://github.com/h8man/NavMeshPlus.git
导入插件后新建一个空物体命名为NavMesh,并为它添加上Navigation Surface和NavMesh CollectSources2d组件
为TileMap添加上Navigation Modfier组件
回到刚刚创建的NavMesh物体上点击 Navigation Surface的Bake,这样就会依据TileMap自动生成导航网格
在敌人身上添加Nav Mesh Agent
为其添加一个脚本
public class EnemyAI : MonoBehaviour
{
public NavMeshAgent meshAgent;
public Transform trans;
// Start is called before the first frame update
void Start()
{
meshAgent.updateRotation = false;
meshAgent.updateUpAxis = false;
}
// Update is called once per frame
void Update()
{
meshAgent.SetDestination(trans.position);
}
}
把敌人自身的Nav Mesh Agent组件赋给meshAgent,把要追击的主角赋给trans
测试敌人就会自动追踪主角了
但由于TileMap的一些collider和背景重叠了,分离起来比较麻烦,所以我暂不处理,应该有多张TileMap,分为背景层和碰撞层。
如果要让敌人绕过某个物体来追击主角,可以在物体上添加Navigation Modifier,把Area Type改为not walkable,然后重新Bake。
如果想添加可编辑区域的导航网格,可以改为添加Navigation ModiferVolume(需添加sprite)
综上,自动寻路系统还很不完善,以后再慢慢改进,下回我将会为敌人制作血条。