当我写我的第一个AI时

哈Ha 我的故事开始于2019年1月。

我和我的Tima游戏开发人员决定承担我们历史上最大的项目,即2D平台程序。 不,我们之前没有做过FlappyBirds或蛇,但是这个项目的工作量使我们大吃一惊。 首先,我们放弃了通常的垂直楼梯,然后走了阶梯。 我们编写了门的逻辑,可以用“一把钥匙”将门锁上,并用螺丝将可破坏的块拧上。 有一段时间,有必要编写人工智能。 作为我们经验不足的团队中经验最丰富的脚本编写者,编写AI的荣誉落在了我身上。 我哭了起来,不知道该怎么做,我为自己能写出我们项目中最困难的机制而感到自豪。

阶段1:找到路径并沿着路径移动


步骤1.1:寻找方法

由于主要位置不是在露天场所,而是在建筑物中,因此有必要在数十扇门,楼梯和房间之间寻找路线。 经过深思熟虑,团队负责人认为值得对A *算法进行某种模仿,使我们可以在其中运行该机器人的节点之间进行交互。 进行测试,为了清楚起见,将节点挂在SprateRenderers上。 接下来要做什么?

考虑到这个问题,我走了三天。 在我的一位同志提出一种有趣的算法之前,节点将像大脑神经元一样被激发。

这样啊 有一个节点A,附近有一个AI,还有一个节点B,该AI应该到达。 为所有节点提供其ID,并标记将向其发送信号的连接节点。 每个节点都有自己的布尔变量“ isChecked”和变量“ triggeredBy”,其中包含“激发”它的节点的ID。 因此,当节点B受到影响时,它将通过链到达节点A,从而识别出信号经过的节点的所有ID。 因此,我从机器人应该通过的节点的ID中获得了路径。 如果您突然不明白它是如何工作的,那么我会讲一个故事。
一次,伊凡(Ivan)无事可做,于是他决定补上自己的家谱。 不幸的是,他没有足够的信息将这个想法变成现实。 伊万(Ivan)对这个想法非常热衷,因此他决定,当他到达主要祖先时,将能够发现他意想不到的亲戚。 伊万(Ivan)知道他可以和父亲见面聊天并去了那里。 父亲告诉他伊凡的祖父叫伊凡,并告诉他在哪里可以找到。 伊万找到了伊万,他说伊万的曾祖父可以亲自认识这位祖先,但他早已去世。 伊万将一生的时间投入到了黑暗艺术的研究中,但是最终他得以复活了他的曾祖父。 曾祖父说他的祖先是狼人,他的遗体被埋在三个松树的边缘。 伊万去了那里,发现一个人正在挖坟墓。 原来,这个人是十二表哥伊凡。 Ivan感到很惊讶,因为他们来到了一个地方,但是他的兄弟竟然是一名程序员,并解释了所有内容。

-我最喜欢的游戏*名称*的导航原理在这里起作用!

-那是什么?

-如果每个继承人都亲自认识了他的父母,那么您可以从每个继承人那里来,成为该系统的共同父母。
结果如下:



这是一个int变量数组,表示该单元应通过的节点的ID。

步骤1.2.1:沿路径移动

我有一个节点ID列表,我有一个机器人。 接下来是什么? 然后,您需要沿着该路径移动机器人。

好吧,我想出了这个选项:机器人到达了该节点,检查了一下,看下一个是什么,然后转到了下一个节点。 做到了 获得。 我很高兴...但是...

1.2.2阶段:梯子及其与AI的交互

就像一位黑白英雄曾经说过的:“楼梯...我的主要敌人..”

有必要确定下一个节点是在AI之上,之下还是在该层次上。 根据此信息,他将走过楼梯(忽略碰撞)或爬上楼梯(与碰撞进行交互)。 哦,在与引擎的这场战斗中,很多神经细胞死亡。在论坛上,我读到您可以将所有内容分层排列,在“编辑”->“ Physics2D”选项卡中,您可以配置为忽略一层和另一层的碰撞。 一切正常!
仍然只有教他开门。 没有问题。

结果:





阶段2:情绪和暗示


阶段2.1:情绪

是的,我们决定附加情感...和提示。

情绪将通过面部表情和动作动画突出显示。

副本将显示在文本上方。

我一口气搞砸了情感。为此,我已经制作了变量“ emotionID”,该变量存储了情感的ID。 这是副本...

步骤2.2:副本

对于美女做了一个单独的类

[System.Serializable] //      class Phrases { public string Name; // ,    public int byEmotionID; // ,      public string[] Phrases;//   } 

制作了此类的数组。 此外,仅根据情感ID,我就从列表中放入任何短语。 每N秒更新一次。

但是我决定走的更远! 对于每个字符,我制作了一个扩展名为.phrs的文件,通过在文件中每个字符的字节数上增加X个字节来对其进行编码。 结果是不可读,不可更改的文本。 做了类似他的标记的事情,制作了一种算法,该算法将所有内容从该标记转换为Phrases类数组。
太好了! 一切正常!

我想写一个清晰的程序来填充这样的文件,但在这里我们结束了故事的结尾。

结束..?


我们很快就厌倦了繁重的,无偿的工作……安装新的编码器无济于事……团队崩溃了……代码仍然位于Unity云上。

当然,不久前便开始出现继续该项目的想法,但是随着进一步的货币化……如果有成功的话,那么我可能会写出整个开发过程的历史。 但这就是我有关新手脚本编写者和AI的故事的结尾。

Source: https://habr.com/ru/post/zh-CN452204/


All Articles