ビデオゲームのNPC · 4つの遊べる世界

ビデオゲームのNPC:ノンプレイヤーキャラクターはどう動くのか(遊べるデモ付き)

自分だけのNPCビデオゲームを作る

ビデオゲームにおけるNPCとは何か。NPCがどう作られ、どう振る舞うのかを確かめ、ノンプレイヤーキャラクターが動き、話し、反応する4つの本格的なブラウザ3Dゲームで遊びましょう。

✦ゲーム
作る:NPCビデオゲーム

ビデオゲームにおけるNPCとは、ノンプレイヤーキャラクターのことです。プレイヤーが直接操作しないのに、空間を占め、状態を保持し、世界の状況に反応する実体を指します。この言葉は意図的に広く定義されており、その広さがほとんどの混乱を生んでいます。時間割を持つ店主も、廊下であなたについてくる仲間も、同じセリフを繰り返す遍歴の商人も、すべてNPCですが、作り方は同じではなく、動かすコストも同じではありません。

このページでは、NPCが実際に何であるか、どうやって作られるか、そして生きているように見えるだけのスクリプト化されたトリガーとどう見分けるかを扱います。このサイトにある4つの遊べる世界 — Agent Sprite Forge、The Cyclops' Island、Mini World、そして3Dゲームビルダーそのもの — を実例として使うので、文章で読む代わりに、NPCに歩み寄ってその振る舞いを観察できます。

早わかり:ビデオゲームでNPCとみなされるもの

NPCとは、ゲーム世界の中でプレイヤーが直接操作しないキャラクターすべてを指します。位置と状態を持ち、プレイヤーがボタンを押さなくても発火する振る舞いを少なくとも一つ備えています。プレイヤーをシーンから取り除いても、そのキャラクターが何かをする — 経路を歩く、扉を開ける、近くの出来事に反応する — なら、それはNPCです。

キャラクターと仕掛けを分ける境界線は、状態の所有です。キャラクターはフレームをまたいで持続する変数を持ちます。現在の体力、現在の標的、現在の巡回インデックス、現在の会話ノードです。仕掛けは実際には状態を持ちません — 条件が満たされたときに一度発火し、それで終わりです。門を開ける感圧板は仕掛けです。門が開くのに反応し、あなたがそこに立っていたことを覚えていて、経路を変える衛兵はNPCです。違いは見た目の精細さではありません。出来事が起きたフレームを越えて何かが生き残るかどうかです。

ビデオゲームNPCの短い歴史

1970年代後半から1980年代のテキストアドベンチャーは、NPCをパーサーの対象として動かしていました。キャラクターは、パーサーが認識する固有名詞と、小さなフラグの塊としてのみ存在しました。初期のテキストアドベンチャーの盗賊は、あなたが同じ部屋にいて、まだ盗んでいなければアイテムを盗みました — これは2つの変数を持つNPCです。存在と、盗んだかどうかのフラグです。経路探索も、アニメーションも、スケジュールもありません。振る舞いはキャラクターではなくフラグの中にありました。

スプライト時代のNPCはアニメーションと衝突判定を加えましたが、振る舞いは薄いままでした。町の住民は決まった2点間を往復し、プレイヤーが半径内にいると待機アニメーションを再生し、接触すると会話ボックスを開きました。重要な技術的変化は、NPCが物理世界の中に位置を持つようになったため、軽く作らなければならなくなったことです。8ビットや16ビットのハードウェアで一度に何十体も画面に出すため、各NPCは数バイトの状態だけを受け取り、距離の比較より複雑でないフレームごとのチェックを実行していました。

スケジュール駆動のNPCは、メモリとCPUの予算が、プレイヤーの位置とは無関係にキャラクターが存在することを許したときに現れました。営業時間の値、家へのウェイポイント、歩行経路を持つ店主は、あなたが訪れたときに別の場所にいることができ、その不在はプレイヤーに読み取れます。実装は時計と参照テーブルです。ゲーム内時刻21時には家のウェイポイントを目指し、8時には店を目指します。プレイヤーはテーブルを見ることはなく、結果だけを見ます。

生成されるNPCは現在の時代です。状態ごとに1行を書く代わりに、キャラクターの説明を書いて、モデルに実行時にセリフ、掛け声、振る舞いを生成させます。トレードオフはもはや保存容量ではなく決定性です。生成されたセリフは完全には事前確認できないため、口調、長さ、NPCが参照してよいものにガードレールが必要です。3Dゲームビルダーでは、まさにこの理由から、NPCのプロンプトは説明と小さな振る舞いの組に制限されています。

現代のNPCはどう作られるか

どのNPCも、協調する5つの部分の積み重ねです。状態、経路、アニメーション、会話、知覚です。状態はNPCが所有するデータです — 体力、標的、巡回インデックス、会話ノード、警戒レベル。経路は点と点の間をどう移動するかです。アニメーションは移動と待機の瞬間をどう表示するかです。会話は状況に応じて生み出されるテキストと音声です。知覚は、何かが変わったことをNPCに伝える入力で、通常は距離のチェック、視線のレイキャスト、またはトリガーボリュームの重なりです。

典型的なプロジェクトでは、これらの部分は別々の場所に置かれます。状態はNPCの実体に付くスクリプトかコンポーネントです — Unity流に言えばMonoBehaviour、GodotならNodeスクリプト、ブラウザのThree.jsビルドならメッシュに付けた素のオブジェクトです。経路はウェイポイントのデータかナビメッシュのどちらかです。アニメーションは、待機、歩行、攻撃といった名前付きクリップを持つステートマシンです。会話はデータファイルで、多くの場合、小さなノードグラフか、状態をキーにしたテーブルです。知覚は通常、衝突形状とフレームごとのチェックです。

最もよくある失敗の型は、状態とアニメーションがずれてしまうことです。NPCが追跡状態なのに待機クリップを再生し続けるので、脚を動かさずにあなたの方へ滑っていきます。修正はアニメーションを増やすことではありません。現在の状態を書き込む場所をコード内に一つ、クリップを選ぶためにそれを読み取る場所を一つにすることです。その二つが別々のスクリプトにあると、滑りが生じます。同じ関数にあれば、生じません。

2番目によくある失敗は、レベルと一致しない経路です。古いレイアウトに対して作られた巡回経路は、ジオメトリが変わったあと、NPCを壁に突っ込ませたり、崖から落としたりします。ブラウザのビルドで最も安上がりで堅牢な方法は、巡回地点を名前付きの空オブジェクトとして保ち、読み込み時に再解決することです。そうすれば、壁を動かしても経路が孤立しません。

NPCのコストが高くなるのは知覚の部分です。NPCごとにフレームごとのレイキャストは、数体なら問題ありませんが、何百体もいると無駄になります。よくある最適化は、共有の空間グリッド、チェックの間隔、そしてレイキャストを走らせる前の早期の距離による除外です。NPCが40メートル離れていて知覚半径が8なら、レイキャストは決して行われるべきではありません。

各パーツがシーン内のどこにあるか

状態:NPCの実体そのものに置きます。小さく保ってください — 少数の数値と、現在の会話ノード用の文字列一つです。それ以上が必要なら、そのNPCを二人のキャラクターに分けてください。

経路:シーンと並べて保存されるワールド空間の点のリストとして。モデルに焼き込まないでください。アニメーション:リグ上の名前付きクリップとして、単一の状態スイッチで選びます。会話:ライターがコードに触れずに編集できるよう、別のデータファイルに置きます。知覚:トリガーボリュームと距離のチェックとして、レイキャストは最後の段階にし、最初にはしないでください。

1

01

NPCモデルをシーンに配置し、現在の状態、標的、巡回インデックスのフィールドを持つ状態コンポーネントを付けます。

2

02

ウェイポイントのオブジェクトを3つか4つ加え、レベルの編集後も経路が生き残るように名前を付けます。

3

03

少なくとも待機と歩行を持つアニメーションのステートマシンを組み、現在の状態の値だけから動かします。

4

04

NPCの認識半径に合わせた大きさの知覚トリガーボリュームを加えます。

5

05

会話は状態をキーにした小さなテーブルとして書き、一致しない状態用の既定のセリフを用意します。

6

06

読み込み時にウェイポイントと会話キーを再解決し、壁を一つ動かして巡回がまだ動くことを確認してテストします。

4つの遊べる世界、4つのNPCの在り方

NPCの振る舞いを理解する最も明快な方法は、その隣に立って、見えるものを変えてみることです。Neta Studioのこれら4つの世界は、それぞれ異なる振る舞いのパターンを示しています。開いて、NPCの知覚範囲に歩み入り、そこから出て、何が変わるかを見てください。

Agent Sprite Forgeは、短いキャラクターの説明と小さな状態の組で定義されたNPCを動かしています。近づくと、その応答は説明から生成され、世界が公開する状態に制限されます。面白いテストは繰り返しです。同じNPCに二度近づき、二度目の応答がどれだけ変わるかを比べます。そのばらつきは世界ではなくモデルのもので、ステートマシンは固定されています。

The Cyclops' Islandは、追跡と捜索のパターンを持つ大きなNPCを使っています。プレイヤーが知覚半径の内側にいるとサイクロプスは追いかけ、プレイヤーが視線を切ると、最後に確認した位置を捜索し、その後で巡回経路に戻ります。捜索の段階が、それを誘導ミサイルではなくキャラクターとして読ませます — 古い情報に基づいて行動するからです。

Mini Worldは、短いループとインタラクションのプロンプトを持つ小さなNPCをいくつか配置しています。その振る舞いは意図的に薄く、歩く、止まる、プレイヤーが1メートル以内にいると反応する、というものです。ここでの価値は数です。5体か6体を一度に見て、説得力のあるNPCのループが実際どれほど安上がりかを確かめられます。

3Dゲームビルダーは、NPCを直接配置して設定する場所です。各NPCには説明、巡回経路、状態の組が与えられます。小さなもの — 部屋一つ、NPC一体、経路一本 — を作り、境界を試します。知覚半径を縮めてNPCが決してあなたに気づかないようにし、次に広げて決してあなたに気づくのをやめないようにします。その両極端の間にある使える帯の幅が調整の問題であり、それはどのエンジンにも存在します。

性能について一言。ブラウザのビルドでは、NPCのコストはジオメトリではなく、知覚のチェックとアニメーションが大部分を占めます。フレームごとにレイキャストする10体のNPCは、たとえ高精細モデルが間隔チェック側に載っていても、共有の間隔チェックを使う10体のNPCよりコストが高くなります。NPCが動いているときにシーンがカクつくなら、まず知覚のループを見てください。

  • Agent Sprite Forge説明に基づくNPCで、生成される応答は制限されています。小さな状態の組とキャラクターのプロンプトが、話題から外れない会話をどう生むかを確かめられます。
  • The Cyclops' Island追跡、捜索、巡回への復帰の状態を持つ、一体だけの大きなNPCです。古い情報に基づく行動が、どう知性として読めるかを研究できます。
  • Mini World近接のプロンプトを持つ、短いループの軽量なNPCが数体います。キャラクターが存在として読まれるまでに、どれほどわずかな振る舞いで足りるかを確かめられます。
  • 3DゲームビルダーNPCを配置し、説明を設定し、巡回経路を描き、知覚半径を調整します。決してあなたに気づかないNPCと、決して気づくのをやめないNPCの間の、使える帯を見つけられます。
Little Ritual — 小さな惑星のクエストNPC。

なぜグラフィックではなく振る舞いがNPCを売るのか

経路を歩き、扉の前で止まり、あなたが戻ったときには別の場所にいる低精細のキャラクターは、生きていると読めます。一点に立って同じセリフを繰り返す高精細のキャラクターは、家具と読めます。プレイヤーはポリゴンを評価しているのではありません。プレイヤーはキャラクターが何を望んでいるかのモデルを組み立てており、そのモデルはメッシュではなく、タイミングと位置から生まれます。

その仕組みは期待です。キャラクターが朝は市場にいて夜は家にいるなら、プレイヤーは仮説を立てます — このキャラクターには決まった習慣がある — そしてその仮説は二度目の訪問で確認されます。その確認が効果のすべてです。時計一つと参照テーブル一つで済みます。彫像に細部を足しても代わりにはなりません。彫像は何も否定も確認もしないからです。

ずっと古いゲームのスケジュール駆動NPCが今も語られ、見た目に優れた静止NPCが忘れられるのはそのためです。振る舞いが中身であり、モデルは包装です。ブラウザのエディターで作っていて時間が限られているなら、テクスチャに使う前に、状態の遷移と巡回経路に時間を使ってください。

NPCとスクリプト化されたトリガーの見分け方

NPCもトリガーもプレイヤーに反応するので、デザインレビューで混同されます。違いは、出来事のあとに何かが持続するかどうかです。どちらを見ているのか判断するときは、以下の手がかりをチェックリストとして使ってください。

この表は純粋さを試すものではありません。多くのゲームは、NPCの振る舞いを始めるためにトリガーを使います — 衛兵を巡回から警戒へ切り替えるトリガーボリュームです。それは正常で正しいことです。問題は、トリガーがキャラクターとしてプレイヤーに提示されるときです。一度発火し、そのキャラクターは二度と何も認めず、二度目の遭遇で錯覚が崩れます。

手がかりNPCである場合スクリプト化されたトリガーである場合
繰り返し同じキャラクターが二度目の遭遇でも反応し続ける一度発火したら二度と発火しない
状態フレームを越えて生き残る変数を持つ — 警戒レベル、巡回インデックス発火済みか未発火かのフラグ以外に状態を持たない
位置遭遇と遭遇の間、世界を移動する配置された場所にとどまる
反応の範囲文脈(時間帯、体力、距離)に応じて違う反応をする文脈に関係なく同じ反応をする
失敗詰まったり、標的を見失ったり、経路取りを誤ったりする失敗しない — 発火したか、しなかったかのどちらかである
コストフレームごとの知覚とアニメーションの予算出来事のあとは無視できる
会話状態をキーにした組からセリフを選ぶ固定のセリフを一つだけ再生する
The Cyclops' Island — 衝突判定を持つ敵NPC。
Ashenmere — 決闘しながら読める対戦相手のAI。
Mini World — 世界を歩き、そこに配置されたキャラクターたちに会う。

それが属する世界に足を踏み入れる

スプライトは、立つ場所を持たないキャラクターです。最後の手順は、ほかにはないものです。作ったばかりのシートを、誰かが歩き回れる世界に置きます — 小さな島、惑星、雨の降る街角。このサイトのすべての世界は、一つの書かれた説明から作られ、遊べるページとして公開されています。

3Dゲームビルダーに戻る

完成した31の3Dワールド、ゲーム、シーンがすべて一つのページに — そのすべてが遊べます。

プラットフォーム: Neta Studioページ: ビデオゲームのNPC:ノンプレイヤーキャラクターはどう動くのか(遊べるデモ付き)次に読む: /explore/guide/what-is-a-non-player-character · /explore/guide/what-are-npcs · /explore/guide/npc-behavior
×