目の前に現れた、高校時代の幽霊

私にとって数学は、理解できない公式を丸暗記し、ただ点数を取るためだけの「苦行」でしかありませんでした。特に図形やベクトル。教科書の無機質な図形たちは、私の実生活とは何の接点も持たない、いわば『別世界の住人』だったのです。 しかし、Unityで『猫の敵がプレイヤーを追いかけてくる』という、ゲームならば当たり前の仕組みを作ろうとした瞬間、その幽霊たちが再び私の前に現れました。「プレイヤーが敵の正面、かつ視界内にいる時だけ追いかけさせたい」。このシンプルな望みを叶えるためには、あの忌まわしい『内積』という武器が必要不可欠だったのです。

目の前に現れた、高校時代の幽霊

『視界』という名の、論理的な絶望

最初は安易に考えていました。「敵とプレイヤーの距離が近ければいいんだろう?」と。しかし、それでは背後からどれほど忍び寄っても、敵は超能力者のように即座に反転し、私を追いかけてきます。それはもはや「猫のゲーム」ではなく、ホラー映画でした。 「敵がどこを向いているか」という情報と、「自分から見てどっちの方向にプレイヤーがいるか」を計算し、その『角度の差』を導き出さなければならない。冷や汗をかきながらAIに相談した時、返ってきた答えは予想していた通りでした。――『Vector3.Dot(内積)を使いましょう』。私は一気に、10年前の赤点だった数学のテスト用紙の記憶へと引き戻されました。

公式の向こう側にあった『懐中電灯』のメタファー

AIは私の沈黙を察したのか、数式を語る前に一つのイメージを提示してくれました。 「内積は、真っ暗闇の中で懐中電灯の光を照らし、その光の中に誰かがいるかどうかを調べるようなものです」と。 敵の向き(正面ベクトル)が『懐中電灯の光の向き』。プレイヤーの方向が『調べたい対象』。この2つの重なり具合を計算するのが内積。二つがピッタリ重なれば「1」、真横なら「0」、真後ろなら「-1」。この言葉を聞いた瞬間、私の脳内で無機質な公式が、リアルなゲーム体験としての『光』に変わりました。「あぁ、これは単なる計算ではなく、視覚をシミュレーションするための道具なんだ」と。

1行のコードに宿る『10年の呪縛』からの解放

Unityでは、この複雑な計算を `Vector3.Dot` という一行の関数で片付けることができます。AIが教えてくれたコードは、驚くほどシンプルで、かつ力強いものでした。まるで魔法の呪文を手に入れたような感覚です。

Source Code
// 敵の視界判定ロジック
void Update() {
    // 1. プレイヤーへの方向ベクトルを計算(敵からプレイヤーへの矢印)
    Vector3 directionToPlayer = (player.position - transform.position).normalized;

    // 2. 敵の正面(forward)とプレイヤーへの方向の内積を計算
    // 結果(dot)は、向きが一致していれば1、直角なら0、反対なら-1になる
    float dot = Vector3.Dot(transform.forward, directionToPlayer);

    // 3. 内積が0.7以上(約45度以内)なら「視界内」と判定
    if (dot > 0.7f) {
        float distance = Vector3.Distance(transform.position, player.position);
        if (distance < detectRange) {
            Debug.Log("見つけたぞ!");
            StartChase();
        }
    }
}

『0.7』という数字をいじる全能感

コードを書いた後、さらなる発見が待っていました。「0.7」という数字を「0.9」に変えれば、敵の視界は針のように鋭くなり、こっそり近づく緊張感が増す。「0.5」に変えれば、視野の広い厄介な敵になる。その様子をリアルタイムで確認しながら調節していく作業は、まさに世界のルールをこの手で書き換えている実感を伴うものでした。 かつての数学は、「いかに正解か」を問われるものでしたが、ゲーム開発における数学は、「いかに自分が面白いと思うか」を表現するための手段でした。このパラダイムシフトこそが、大人になってプログラミングを学ぶ最大の醍醐味かもしれません。

数学は『苦行』ではなく、『世界を操る杖』だった

数学への苦手意識は、今でも完全には消えていません。しかし、一つだけ確信したことがあります。数学の本当の姿は、テスト用紙に閉じ込められた退屈な公式ではなく、私たちの理想を三次元の世界に具現化するための「強力な杖」であるということです。 AIとの対話によって、教科書の住人だった数学が、私のゲームに命を吹き込む道具に変わった。この経験は、私に「分からないことを恐れなくていい」という大きな自信を与えてくれました。理解できない概念であっても、AIという翻訳機を通せば、それは魔法の杖へと姿を変えるのです。

数学への『恐怖』を、『好奇心』へ塗り替える

この開発を通じて、私は少しずつ数学を好きになり始めています。次は三角関数を使って、猫のしっぽを自然に揺らしてみたい。行列を使って、世界をダイナミックに変化させてみたい。――かつては考えもしなかったような好奇心が、自分の中に芽生えています。 AI時代の学習とは、単に情報を得ることではなく、自分の中にある「できない」という呪いを一つずつ解いていくプロセスに他なりません。これからも、AIという相棒と共に、かつて諦めた世界の断片を一つずつ丁寧に拾い上げ、自分だけの物語に命を吹き込んでいきたいと思っています。