前言
利用 NavMeshPlus 搭配 Unity自带的AI Navigation制作俯视角2D敌人,我拿我制作的一款2D坦克对战的游戏举例子,先看视频,实现了自动寻路,释放子弹躲避子弹的功能。
项目4
一、准备工作
NavMeshPlus下载链接:GitHub - h8man/NavMeshPlus: Unity NavMesh 2D Pathfinding。
AI Navigation在unity package中直接下载即可
3D游戏应该很多人都使用过AI Navigation寻路,我也拿这个用在2D上用了一下,也就是在2d创建一个3d平面做地面,但是在手机上运行总会出现莫名其妙的bug,后来利用Plus才能够AI才能正常运作。
二、使用步骤
1.建立可行走区域地图
首先确保一个物体上挂载了Sprite Render,3D游戏是需要MeshRender,这个sprite的形状就是地图的形状,我测试了包括不规则图形也可以渲染出正确的可行走区域。首先在这个物体上挂载下面这几个组件,Navigation Modifier是用来标记这是可走区域还是不可走区域,默认可走区域,可以把响应的障碍物设置为不可走区域
2.渲染寻路地图
新建一个空物体,这个空物体有以下几个组件,注意名字不要弄错了,这里的组件是Plus中的插件和Unity自带的很像,第三个组件是2D专有的组件,加入后点击Roate surface to xy,这个一定要先点击,点完后,点击Bake,你会发现地图图片上出现了蓝色区域,那就是AI可寻路的区域
3.制作敌人AI
对于AI的制作和unity插件做3D寻路差别不大,首先AI挂上组件,至于每个属性的作用,大家可以自己尝试摸索
接着就是写脚本了,有以下几个重要的知识点
1.navMeshAgent.Warp(fuhuodian.position);如果要改变AI初始生成的位置建议使用Warp函数
navMeshAgent是获取的自身Agent组件
2. navMeshAgent.SetDestination(target.position);利用这个方法设置目标位置,如果目标位置一直在变化,需要一直调用这个方法
3. navMeshAgent.isStopped = true; 利用这行代码控制AI是否继续移动
4.躲避障碍物
要让AI自动躲避移动的障碍物,只需要在障碍物身上添加下面这个组件
5.扩展思考
关于AI的逻辑操作,我使用了射线检测,如果AI和玩家直线区域没有墙壁就停止寻路发射子弹
如果有墙壁就继续寻路。并且根据速度方向改变AI旋转方向
我做的AI他在躲避子弹这上面还有待提升,因为躲避障碍物的同时,AI还依然在寻路找敌人,这就AI可能出现矛盾鬼畜。。
总结
这种方法应该是最方便快捷的方法了,大家感兴趣可以自己探索这个插件更深处。如果想体验我做的坦克与人机对决,可以在taptap搜指尖坦克体验。