最近翻出了一份 2017 年的简历,LaTeX 排版的。那几年流行用这个。
工作几年之后,简历上的项目会一轮一轮地换。太早的项目被更有分量的项目挤掉,这很正常。所以翻到那一份的时候,上面不少条目我都觉得陌生,像在看别人的简历。
直到看见这一段:
塔防类游戏《像素战争》(类似《部落冲突》) 小组合作;使用 Unity 3D 以及 PlayMaker,主要负责 AI 算法和游戏逻辑的编写。
《像素战争》。看到这几个字,我愣了一下,然后意识到一个有点尴尬的事实:要不是这条简历还在,我大概不会想起自己做过这么一个东西。
于是想趁记忆还没消失干净,把还记得的部分写下来。
这是个什么项目#
那是 2017 年的大三暑假。学校组织了一次工程实训,我们小组合作,做了一个叫《像素战争》的游戏。
玩法大致类似《部落冲突》:玩家把角色放到地图上之后,就不直接控制它们了,角色会自己行动、找目标、战斗。
能确定的技术栈是 Unity、C# 和 PlayMaker。PlayMaker 是 Unity 上一个可视化的状态机插件,不写代码也能把逻辑连出来。当时应该有一部分逻辑是用它搭的,具体哪些用了它、哪些是自己写的 C#,已经记不清了。
我在小组里负责游戏 AI 和游戏逻辑。这里得解释一下,简历上写的“AI 算法”,和今天大家看到 AI 两个字时第一反应想到的东西,完全是两回事。2017 年说的游戏 AI,指的是游戏里角色行为的逻辑,也就是放下去的角色怎么自己动起来,跟机器学习没有任何关系。现在再看简历上“主要负责 AI 算法”这一行,多少有点喜感。
还记得的部分#
游戏里应该有好几种角色。印象里近战和远程都有,具体几种、各自叫什么,完全想不起来了。
角色放下去之后怎么行动,大致流程应该是:自己寻找目标,移动,进入攻击范围,攻击,目标死了再找下一个。不过这条流程是我根据玩法推测的,这类游戏的角色逻辑大概都绕不开这些,当时的实现我已经无法确认了。具体怎么写的、有没有做寻路,统统记不清。至于 NavMesh,我没什么印象,这里就不猜了。
还有一个词,到现在都记得非常具体:空气墙。
空气墙在这个项目里至少有两个用途。一是限制玩家放置角色的区域,不是哪里都能放;二是防止这些自动行动的角色跑出地图边界。角色会自己移动,没有边界约束的话,大概会直接走出地图。
“空气墙”这个词能留下来,我自己也有点意外。项目里那么多逻辑都忘了,偏偏一个最朴素的边界设定记得这么清楚。大概是因为它足够具体,而具体的东西比抽象的设计更容易被记住。
最后那几天#
这个项目还有一件事,我一直记得。
当时我正准备出去实习。实训到了最后阶段,我需要提前离校,第二天就要到海翔广场旁边的酒店报到。
项目最后是做完了的。只是到了最后调试的时候,我已经不在学校,还有一部分游戏逻辑没调通,就和室友远程结对编程,一点一点把剩下的逻辑调完。
报到前一晚,我还在调 Unity 里的游戏逻辑。两件事挨得这么近,当时倒没觉得有什么特别。现在回头看,这算是大学和上班之间一个很具体的分界点:一边是学校的工程实训,一边是马上要开始的实习,中间隔着一个还没调完的游戏。
收尾#
这个项目没有留下什么。代码不知道还在不在,截图大概率也没有了。如果现在去翻硬盘,估计翻不出什么。
所以只能先写这么多。能确定的部分就写下来,记不清的就空着。至少下次再想起《像素战争》的时候,这篇东西还在。
简历上消失的项目不代表没发生过。只是如果不记下来,它们可能就真的只存在于几年前的一份 LaTeX 文件里了。