能迂回,会绕路的开源游戏AI:解决怪物撞墙卡死角
贾浩楠 发自 凹非寺
量子位 报道 | 公众号 QbitAI
作为一个游戏玩家,有一天你发现了游戏中的bug:
竟然可以把怪拉到墙角卡住!
于是整个游戏成了白送局,一刀999,本来要1个小时的关卡5分钟就打通了,很爽对吗?
爽完之后呢?是不是有无可言状的空虚和罪恶感?一个好游戏就这么废掉了。
游戏开发者本意是想让玩家历经磨难、欲罢不能,但愚蠢的游戏bug毁了一切。
最近,一家来自加拿大的初创游戏工作室:A Bit Awake,开源了新模型——Enemy AI,可以让游戏中的敌人自动追踪玩家路径,并主动避开墙角、岩石等环境障碍,提升整个游戏的挑战和可玩性。
如果你在做游戏开发,那么这个项目可能会对你有很大的帮助。
从0开始,先写一个卡墙角的蠢AI
首先,我们先在Godot引擎中建立一个使用KinematicBody2D碰撞节点的敌对单位,并且使用State Machine来设置它的状态。
写出最简单的、只会向玩家直线移动的敌人追踪状态:
玩家逃跑路径的设置与追踪
为了提高追踪算法的表现,先要给玩家角色的移动线路上设置标记。
这样一来,如果敌人无法看到玩家,就会自动搜寻是否有玩家留下的移动轨迹并向这个轨迹移动,就像警犬一样。
接下来要确保痕迹信息真实有效地留在路径上,这里用到了一个带计时器的Node2D场景。我们将轨迹产生间隔设为0.1秒。
调试时,如果你想让路径轨迹可见,只需要加一个ColorRect节点。
现在你的敌人已经激发出内心嗜血的本能,对玩家穷追不舍了!
物理障碍的设置
接下来我们还需要让敌对AI清楚追踪路径上有哪些要避开的障碍物。
首先要给敌对单位添加一个RayCast2D节点,同时还要设置环境中的物理层,让AI知道它与痕迹点之间(Ray)有哪些障碍。
在Godot中选出Project栏,在Project Settings中找到LayerNames选项,根据你的游戏选择2D或3DPhysics。
命名不同的的物理层后,要将这些物理层应用到不同的目标(比如岩石、墙、关闭的门等)之上,在Property Inspector栏中的Collision选项中将目标设置为某一定义好的物理层。
将目标的物理层设置好以后,我们还要更新敌人的RayCast2D节点,使它能够判断眼前的障碍物能否通过。
最后一步,将以上的步骤同步在敌人单位的追踪状态算法中:
好了,现在你的敌对AI如果在追踪路上遇到了障碍物丢失痕迹目标,它会逐个检查玩家的路径痕迹,并试图建立与痕迹点的连线,一旦成功就会马上开始追踪。
至此整个算法完成,实现简单,但对游戏质量有大的提升,希望能够帮到做游戏开发的你。
代码开源链接:
https://abitawake.com/news/articles/enemy-ai-chasing-a-player-without-navigation2d-or-a-star-pathfinding
作者系网易新闻·网易号“各有态度”签约作者
— 完 —
2020年是个天文大年,4月8日有全年最大的超级月亮,6月有横跨中国的日环食,8月有英仙座流星雨,10月还有两年一次的火星冲日,12月有双子座流星雨。
我们邀请美国国家地理极致中国探享家刘允和天文爱好者们,组建了一个天文航天亲子社群,群里除了交流天文航天知识,还会组织一系列讲座、线下观星、航天探访活动。
如果你家有小朋友,也热爱天文航天,一起来玩啊:
天文航天亲子社群招募中,一起来玩吧~
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态
喜欢就点「在看」吧 !
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
随时掌握互联网精彩
- 1 锣鼓迎新春 舞乐庆华年 7929990
- 2 第一批返程的人已经堵路上了 7951889
- 3 每到过年人类幼崽衣服就洗得特别勤 7807702
- 4 南北民俗闹新春 欢欢喜喜过大年 7730210
- 5 从春晚配角到主角他熬了20年 7605784
- 6 普陀山消防员 制止不了就加入 7514394
- 7 饺子导演手绘破亿海报笔要画冒烟了 7478889
- 8 男孩井盖点鞭炮受损车主回应 7317528
- 9 妈妈将女儿扮成哪吒超像的 7213031
- 10 “以旧换新”激发消费新活力 7144212