unity-AI设计理念和编程思想(一)

    由于前段时间的寻路小车让我意识到AI在游戏还有虚拟现实中的重要性,回想以前的无论是《地下城与勇士》还是《英雄联盟》里面的野怪都是很被动,几乎可以忽略自主能力,当然有好处也有坏处。

    首先,需要明白,AI对象是非玩家角色,AI角色可以认为它们处于 感知->思考->行动 这样一个循环中。现代游戏对AI的需求分为三种:运动能力,决策能力,战略能力。比如无论是英雄联盟还是王者荣耀都有人机对战,但是这些几乎都是新手的专场,原因是这些AI电脑玩家水平很低,决策能力和战略能力很低。

    我相信,现在火热的人工智能落脚点之一便是游戏AI。接着说感知,AI去感知环境是很难的,做法有很多,简单譬如王者和LOL野怪都是你攻击它然后才会反击,地下城之类都是你进入某个范围它会朝你攻击,且都会有范围的限制,这些几乎不能算作AI,真正去感知子系统的比如使用碰撞体、射线Raycast进行检测碰撞得到信息,这些还是比较简单的做法,如果和深度学习里的图像识别结合,我认为这才是一个比较智能的感知环境。思考过程是很复杂的,一般都是我们定义好很多种情况之后AI角色相应的做出判断。其实,如果我们能同样使用深度学习,相信会发生意想不到的结果。学习“阿尔法狗”的做法,去改变AI角色,行动包括行走和攻击等行为。但是这样也有一个弊端,AI角色过于聪明会使游戏玩家失去信心,比如“阿尔法狗”现在难求一败,这对很多围棋玩家实在是种伤害,但这里我们不需要关心这么多,只谈技术。比如你发现了敌人,你需要躲避还是攻击,这是思考决策的过程,但如果AI打算逃跑,需要找到合适的路径还有躲避障碍物以及其他敌人。

    本节先说感知。如同我上面所说的,使用 射线检测  来感知一般都是用于时刻都需要去感知信息的,而很多游戏时间并不需要这样,AI角色可以通过两种方式获得游戏世界的信息-- 轮询和事件驱动 。简单来说,轮询就是你想知道什么,就去“查询”,比如你想知道周围是否有敌人,你就去查敌人的位置就可以了,弊端很明显,太耗资源。事件驱动方式,设置事件管理器,如果发生了感兴趣的事件,让事件管理器告诉AI,最常见的就是触发器。触发器的种类很多,比如时间相关的(刷新怪物),输入接口触发(用户按键)等等。

    游戏中最常见的感知类型就是视觉和听觉,它们都需要设置许多触发器和感知器  。而且,游戏需要模拟人的记忆,如果人停止攻击野怪也停下来,这肯定不可以的。所以需要设置一个记忆感知器。所有触发器的基类-Trigger类,所有感知器的基类-Sensor类。所有视觉和听觉的感知器和触发器都是它俩的派生类。一般的你需要为它们设置一个事件管理器,用来更新和处理所有的触发器,并维护一个感知器列表。

    触觉感知,在Unity中给物体加上碰撞体,选择检视板的isTrigger即可标记为触觉触发器,这个很常见,自动门,提示信息等,不多说了。

    记忆感知,实现一个SenseMemory类,创建一个记忆列表,主要是记忆保存对象一些属性和保存时间。

    对与感知的使用一般都需要具体情况具体分析,尽量减少内存消耗而且使AI角色合理合适做出反应。

    下一篇总结决策思想。

猜你喜欢

转载自blog.csdn.net/scopperil/article/details/80404506
今日推荐