UEFN × Verse
ゲームのNPCというのは長いあいだ、決まった台詞しか言えなかった。話しかけるたびに同じことを言う、あの繰り返し。それが不満だったわけじゃないけど、Claude APIで何かできないか考えていたとき、ふとこう思った。
「NPCにClaudeを繋いだら、どうなるんだろう。」
実験の着地点は決めなかった。まず動かすことだけを考えて、1日でどこまで行けるか試してみた。
実装を始める前に、まず全体像を整理した。UE5(Unreal Engine 5)はゲームエンジンだ。Claude APIはWebサービスだ。この2つは直接つながらない。
だから間にPythonのサーバー(Flask)を挟む。UE5がサーバーにメッセージを投げ、サーバーがClaudeに転送し、返ってきた答えをUE5に返す。
この「中継役サーバー」という構造は、入出力が何に変わっても共通して使える。LINE Botでも、スマートスピーカーでも、ロボットでも、この骨格は同じだ。今日UE5でやったことは、そのままどんなAI連携にも転用できる雛形になっている。
Pythonサーバーの核心は、NPCのキャラクター設定をsystemプロンプトとして渡すところだ。
これだけで、どんな質問が来ても「老賢者らしい答え」が返ってくる。実際に動かしたときの返答がこれだ。
「こんにちは、賢者よ」と送っただけで、これが返ってきた。台詞の分岐を何十通り書く必要はない。キャラクターを言葉で定義すれば、Claudeがその役を演じてくれる。
UE5側はBlueprintだけで完結する。コードは一行も書かない。
Plugins から HttpBlueprint(Experimental) を有効化し、アクターに HTTP Post Request ノードを追加する。送信先は http://127.0.0.1:5000/talk、BodyにJSONを渡し、レスポンスが返ってきたら Print String で画面に表示する。
Blueprint は視覚的な配線だから、やっていることの意味が掴みやすい。EventBeginPlay → Http Post Request → 成功なら Print String、という流れがノードの繋がりとして目に見える。
実験として「動いた」ことと、展示やゲームとして「運用できる」ことは別の話だ。
Claude APIは1回の会話(約500トークン)で約$0.01〜0.02程度。100会話/日 × 30日 = 約$30〜60(4,500〜9,000円)の試算になる。加えてPythonサーバーをRenderでホストすれば月$7〜25の固定コストが乗る。
決して「無料」ではない。ただ、音声まで付けてリアルな展示デモを作るなら、このコストは十分に意味のある投資になりうると思う。次のステップはElevenLabsで音声を乗せ、メタヒューマンのリップシンクと組み合わせること。設計はすでにできている。
Python・Flask・Claude API・UE5 Blueprintを繋いで、ゲーム内でAI NPCが日本語で会話する仕組みを一日で作った。核心は「サーバーが中継役になる」という設計パターンで、これは入出力の種類を問わずどんなAI連携にも転用できる。
NPCのキャラクターはコードではなく言葉で定義する。台詞分岐を何百本も書く必要はない。「どんな人物か」をsystemプロンプトで渡せば、Claudeがその役を演じてくれる——これがAI時代のNPC設計の基本形になる予感がした。