UDN
Search public documentation:

DialogSystemJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

ダイアログ システム

ドキュメント概要: 特定のゲーム スタイルに使用されるデザイン原理とダイアログ システムの実装に関する概要。

ドキュメントの変更ログ: Scott ShermanJohn Scott により作成、アップデート、Richard Nalezynski? により管理。

概観

ストリーミング オーディオ

Unreal Engine のオーディオ システム は、任意のオーディオ コンテンツの同時ストリーミングをサポートしませんが、中にオーディオの入っているパッケージをストリーミングすることができます。テクスチャ ストリーミングにできる限りの帯域幅を充てたかったので、このアプローチが好まれました。さらに、Unreal Tournament や Gears of War などのような速いアクション ゲームでの遅延は許容できません。また、この時点で FaceFX アニメーションを同期させることは、追加的な作業になってきます。代替方法として、特別なダイアログ システムが Gears に作成されました。

Gears はまた、非スクリプト ダイアログを持つので、このアプローチは努力に見合う価値があります。

非スクリプト ダイアログ

Gears 2 のダイアログ システムは、 非スクリプト ダイアログ システム 、または GUDS です。これは、Gears 1 でも使用されました。

システムはイベントベースで、敵が見つかった場合や自分のチームの誰かが倒れた場合などのゲーム内の出来事について Pawn にコメントさせます。起こり得る各アクションで、Pawn はプレイされることのできるラインの選択肢を持っています。ラインの数は各アクションごとにバラバラであり、まったくない場合もあります。現時点では、Pawn が話すことのできるラインは GUDBank に格納されており、ゲームはマップ上の各ポーンのためにこれを完全に読み込みます。これで、いつでも多量のサウンドが存在することにつながります。

システムのメモリ オーバーヘッドを軽減するために、各プレイヤーの GUDBank はいくつかの小さなバンクに分けられています。ポーンにはいつでも少なくとも 1 つのバンクが読み込まれている状態が保証されているので、セットアップしたいかなる状況にも応答可能となっています。

このプロセスはコンテンツのクッキング 中に行われるので、コンテンツ側でのマネジメント オーバーヘッドが発生しません。システムは、ゲーム特有の_クッカ ヘルパー_を導入します。これは、必要な際にゲームがクッキング プロセスのコントロールを得ることができるようにします。クッキング パイプラインの各段階は、ゲーム クッカ ヘルパーを呼び出し、必要なアクションを実行させることを可能にします。これらのアクションには、クックされるべきパッケージのリストの生成、個々のオブジェクトのクッキング、ヘルパーにパッケージを読みこませる関数 (または、GUDS クッキングの場合のように、その場で 1 つを作成する)、クッキングのためにパッケージが読み込まれた後、しかしいかなるプロセッシングが起こる前に呼び出される関数を含みます。

GUDS クッキングは、以下のようにシステムを利用します。

  • クッカは、クックされる必要があると決定したパッケージのリストを生成します。これが終了すると、クッカ ヘルパーへの呼び出しを行い、ここで、リストに生成される必要のある GUD バンクを追加します。これらは実際には存在しないので、「偽」のパッケージです。ヘルパーは、作成する必要があると分かっているパッケージ名を挿入します。この間、上記したようにソース GUDBanks をいくつかのより小さなバンクに分けます。また、後にシステム内のダイアログによって使用されるサウンド キューと FaceFX アニメーションのリストを生成します。(この情報は、クッカが実行されるたびに再生成されるのを避けるために、永続性のクッカ データに格納されます。) 目次パッケージも、「親」 GUDBank クラスを、それが分けられる GUDBank パッケージのコレクションにマップするようなリストに入れられます。
  • クッカは、リストでパッケージをたどり、それぞれを読み込み、その中でオブジェクトをクックします。パッケージを読み込む際には、まずヘルパーに呼び出しを掛け、パッケージの読み込みを許可します。GUDS の場合は、これが、ヘルパーがその場でパッケージを作成し返す場所になります。これは、新しい GUDBank を作成し、それに適切なラインを埋め込むことに関わります。すべての FaceFX アニメーションはまた、バンクが設定されるとポーンに適用されるような新しい AnimGroup に挿入されます。これはまた、GUD パッケージが後のプロセスでの使用のためにクックされているかどうかを示す内部フラグを設定します。ヘルパーが任意のパッケージ ファイルで特別なプロセッシングを必要としない場合、NULL を返し、クッカはパッケージを標準の方法で読み込みます。これは、すべての非 GUDS パッケージで行われます。
  • パッケージが読み込まれた後、ヘルパーはポスト読み込み関数を呼び出します。GUDS システムの場合は、パッケージが GearGame または GearGameContent の場合、ヘルパーはオリジナルの GUD バンクを見つけて、そのコンテンツを削除します。これは、ラインがクックされたパッケージに取り込まれることを避けるためです。(この操作は、実際の GUDBank オブジェクトのクック中にも行えますが、クッカ ヘルパーの PostLoad 関数の使用ケースを明らかにすることに注目してください。)
  • その後、クッカはパッケージ内の各オブジェクトをたどり、クックします。最初にヘルパー CookObject 関数を呼び出します。これは、標準のクッカがこの先のオブジェクトをプロセスすべきかどうかを示すようなブーリアンを返します。GUDS ヘルパーの場合、オブジェクトが参照されたリストのサウンド キューであり、パッケージが GUDS パッケージでないと、サウンド キューが現在のパッケージにクックされることを避けるため、これは MarkedByCooker に設定されます。GUDS パッケージの場合、これは強制的にエクスポートするように設定され、必要ならば FaceFX アニメーション グループ名も修正されます。オブジェクトが FaceFX アセットまたは animset の場合、そして GUDS パッケージでない場合は、GUDS によって使用されるいかなる参照されるアニメーションもそのセットから削除されます。

ランタイム時に、GUDS マネージャは、バンクのロード/アンロードを処理します。ポーンがスポーンすると、これは GUD マネージャで登録されます。ポーンが GUDS アセットを使用すると、マネージャはコレクションが既に読み込まれたかどうかをチェックします。まだの場合は、ポーンと共にある GUDBank パッケージの非同期読み込みを開始します。読み込まれたパッケージは、適切なコレクションに入れられ、これは、バンクを使用するすべてのポーンがなくなる際に、バンクにくっついたままになるのを避けるため、参照カウントします。さまざまな時期に、新しいバンクのセットをストリーミングするために要求を設置して、応答の繰り返しを軽減することができます。新しいバンクが読み込まれると、古いものはアンロードされます。

この特定のシステムは、ゲームで使用することができないでしょうが、ゲーム独自のニーズに基づいてコンテンツを分けるためのモデルを提供することはできるでしょう。

このシステムは、動的 (非スクリプト) ダイアログのためにデザインされていることに注意してください。

スクリプト ダイアログ

ハードリファレンスされた (状況に固有の) ダイアログは、このアプローチでは恩恵を受けることがありません。変更された GUDS アプローチを取ることもできますが、これは単にダイアログをより小さなバッチに分けるだけになります。1 つのバッチが使用されている間、マネージャが次に必要とされるバッチを非同期読み込みします。バッチが完了したと分かると、アンロードされ、いつでもメモリ内のラインの量を軽減します。メモリ オーバーヘッドを最小限にするためにバッチ サイズのバランスを取りながら、再生で障害がないようにするのが、この場合のコツとなります。