冷笑と再帰って似てる
Unityでゲームを作ってるんです。
もっぱらコーディングは生成AIにお任せしていますが、それでも作業量はかなりのものです。空いてる時間を探しては、自分の気分と相談して、ちまちまと画面に向かっています。
これを何気なく友人に言ったら、「発売したら遊ぶよ」って返されました。ごめんなさい、発売予定はないんです。じゃあ何のためかって、そりゃあ、私が楽しむためでしょう。
友人にはキョトンとされそうですが、私はこう返してやります。「あなたは登山が趣味ですが、乗鞍岳に登ったって、他人には褒められないし、人からお金も取れないし、じゃあなんで登るの?」。
……「そこに山があるから」。
これはお決まりの回答ですね。その真意はおそらく、自身を満足させるためなのでしょう。彼は「山に登り切った自分」だったり、「登り切った後の肉眼で捉えた景色」だったり、内的なものが欲しいのであって、そこに他者は介在しませんよね。
売られないゲームも同じです。私にしか遊ばれないゲームでも、私が作ってやらねば、見たい形は成され得ないのです。
まあ、毎日やり甲斐を感じているか、と聞かれたら嘘になります。
だって、コーディングって大変なんですよ。ChatGPTは数回前の応答すら覚えてくれません。ですから、コード同士の繋がりが皆無なんです。敵のHPを表す変数名ですら、彼らの気分次第で「hpEnemy」だの、「enemiesHp」だの、例えは下手ですが、とにかく物覚えが悪いのです。
ゲーム制作をする前、てっきり私はプログラミング言語など知らなくていいものだと、たかを括っていました。ですが、現実は厳しいものです。結局のところ、私が C# を理解して、コードを修正して、スクリプトをオブジェクトに対応させて、Unity上でのインスペクターを調整して……AIはブレインになってくれやしませんでした。彼らは手足に過ぎません。
ですから、行き詰まる機会は何度も何度も訪れたのです。そのたびに、「私はなんでこんな無意味な……」と諦めかけることもありました。
しかし、私の妄想でしかないアイデアが、現実世界に形を成すのを、どうしても見たかったのです。だからこそ、小休止してはパソコンへ、小休止してはパソコンへ、幾度の虚無感と戦いながら、ゲーム制作は続きました。
そうして、制作終盤のことです。ある程度ゲームは完成してきて、私はデバッグに取り掛かり始めました。
一つ心配だったのは、敵出現パターンを制御するために書いた再帰関数でした。
「なんかカッコよくない?」と、数週間前の私は調子に乗って、再帰を使ったのです。確かにテストプレイでは動いたはず……はずでした。はず、なのです。
私はUnityのゲーム画面を実行し、敵が湧いてくるのを確認しようとしました。すると、いきなりコンソールが真っ赤になりました。
StackOverflowException。
見飽きたようで、見たくなかった単語。半ば諦念のようなため息をついて、私はコードを開きました。どうやらログによれば、SpawnEnemyRecursively()と書かれたメソッドが、延々と自分を呼び続けているようです。
条件分岐は一応書いてありました。でも、よくよく見ると、境界値がずれています。
……何が「ずれています」ですか。ずれさせたのは、私以外の誰がいるっていうんですか。このやろう、偉そうに。
椅子の背もたれにダラッと体を預けて、天井を見上げます。まるで天井が答えを知っているかのように。そうして、何度も思ってきたことを、また思うのです。
なんで私は、これを作ってるんだろう。
しばらくぼんやりして、ようやくキーボードに手を戻します。if (count <= 0) を if (count < 0)にしてしまっていた。たったそれだけで、永遠に自分が自分を呼び続ける、そんな地獄絵図が発生していたのです。
私は思わず、鼻で笑いました。乾いた、ひび割れたような、息だけの笑い。自分で書いた初歩的なミスに対して、でも、どこか他人事みたいな冷たさで。
ああ、これが「冷笑」ってやつか、と一瞬思いました。すると、ふと脳裏に奇妙な連想がよぎりました。
……冷笑と再帰って、似てるなあ。
理由は単純です。
再帰関数は、自分を呼んで、自分に戻って、また自分に潜り込んでいく。
冷笑だってそうです。自分をバカにして、そのバカにした自分をまたバカにして、どんどん深いところへ沈んでいくじゃないですか。終点がない、底がない。
気づいたら、私はモニター前で再び笑っていました。さっきより少しだけ柔らかい微笑みだったと思います。
…………ま、いいか。
境界値を直して、処理を整理して、ついでにログも追加しておきます。再度実行すると、敵はきちんと一定間隔で湧き、コンソールも静かでした。
正直、胸の奥の虚しさはまだ消えていません。でも、その虚しさをいったん抱えたままでも、ゲームは前に進むらしいのです。
冷笑も再帰も、底なしに感じたところで、きちんと「戻り値」を返してやれば終わります。つまり、「停止条件」を作ってやれば。
そんな当たり前のことを、今さら噛みしめながら、今日も私は、賽の河原の石を積むのです。




