本日は DialogueSystem の勉強枠です。
DialogueSystem のダイアログエディタの使い方を確認しながら記事にします。
前回記事
以下の前回記事の続きです。
bluebirdofoz.hatenablog.com
複数のデータベースの操作
一般的には単一のデータベースで作業する方がはるかに簡単です。ただし、Dialogue System は複数のデータベースをサポートしています。
複数のデータベースを追跡し、必要に応じてメモリにロードおよびロードするためにより多くの管理が必要です。
しかし、整理のためにコンテンツを分割したり、任意の時点でメモリにロードされるコンテンツの量を減らしたりする場合に役立ちます。
単一データベースか複数データベースか
ここでは単一のデータベースを使用するか、複数のデータベースを使用するかを決定するためのガイドラインを示します。
- 平均長の会話が 1000 件あるデータベースは約 15 MBのメモリ、または少数のテクスチャファイルに相当するメモリを使用します。
- デスクトップゲームを作っている場合 15 MBは問題にならないはずです。この場合、複数のデータベースを使用する唯一の理由は組織の利益のためです。
- 非常にローエンドのモバイルデバイス用に構築している場合、15 MBは多すぎる可能性がありますが、最終的には仕様と要件によって異なります。
- 次の場合は、複数のデータベースを使用できます。
- 1 つのデータベースが、割り当てるメモリのバジェットよりも大きい場合。
- 1データベースには非常に多くの異なる要素があるため、整理のために分割する必要がある場合。
単一または複数のデータベースのどちらを使用する場合でも、会話のタイトルに"/"を使用して会話をグループ化できることに注意してください。
例えば、会話に次のようなタイトルを付けることができます。
- Companions/Robot Butler/At Your Service
- Companions/Robot Butler/Malfunction
- Desert/Scavenger
- Desert/Scorpion Herder
- Jungle/Shaman
これにより、サブメニュー「Companions」、「Desert」、「Jungle」にグループ化され、会話の選択が簡単になります。
複数のデータベースに関するヒント
複数のデータベースを使用する場合は全てのグローバルデータをグローバルデータベースに入れ、これを Dialog Manager の初期データベースとして割り当てます。
グローバルデータベースには以下のような「保存したゲームに含める必要がある」または「場所に関係なくアクセスする必要がある」全てのものを含める必要があります。
- Player アクターとシーンを横断できるすべてのアクター (プレイヤーをフォローするコンパニオンなど)
- クエスト
- グローバル変数
- コンパニオンチャットなど、プレイヤーがどこにいてもプレイできる会話
- 他のデータベースでは[Sync From DB]を使用してグローバル データ コンテンツを同期します。
別のデータベースからのアセットの同期
複数のデータベースを使用する場合は、全てのアクターを1つのデータベースに定義し、全てのクエストを別のデータベースに定義することができます。
その後、それら別のデータベースから要素を取得するようにデータベースを構成できます。
これを行うにはタブのメニューで[Sync From DB]を選択し、要素の同期元のソースデータベースを選択します。
要素は追加できますが、ソースデータベース内の要素と同じ ID を持つ要素は上書きされることに注意してください。
例えば、プレイヤーが仲間のパーティーと一緒に惑星から惑星へと移動するゲームを作成しているとします。
プレイヤーとコンパニオンアクターはソースデータベースで定義し、このソースデータベースから同期を行ってその惑星の固有のアクターを追加したデータベースを作成できます。
UniqueIDツール
ダイアログデータベースを1つだけ使用する場合はこのセクションの作業は不要です。
内部的には、対話データベース内のすべての要素(アクター、アイテム、会話など)にはID番号があります。
1 つのデータベース内ではこれらの ID は通常、要素タイプごとごとに一意の値が割り振られています。
ただし、あるデータベースで使用されている ID が、別のデータベースでも使用される可能性があります。
実行時に両方のデータベースを読み込むと、ID が競合します。ダイアログシステムは競合したIDで参照しているアセットを認識しません。
これを防ぐには[Tools -> Pixel Crushers -> Dialogue System -> Tools → Unique ID Tool]で UniqueID ツールを使用します。
使い方は一意の ID を保証したいデータベースを追加し、[Process] をクリックするだけです。
[Verbose Logging]にチェックを付けるとツールは全ての ID 番号の変更をコンソールに記録します。
Tips
各データベースのベース ID を設定すると ID の競合が非常に起こりにくくなり、固有 ID ツールを実行する必要性が減少します。
UniqueIDツールを使用する場合
メモリにロードされる全てのデータベースには要素タイプごとに一意のIDが必要です。
例えば、すべてのアクターは一意のアクターIDを持つ必要があります。
[Sync From DB]を使用すると、新しい要素にはグローバルアセットの ID とは異なる ID が割り当てられるため、一意の ID について心配する必要はありません。
ただし、「Desert」のデータベースに「Jungle」のデータベースのIDと重複するIDが含まれている可能性は十分にあります。
しかし、これは砂漠とジャングルを同時にロードしない限り、メモリ内でIDの競合は発生せず、問題ありません。
ベースID
ベースIDは[Database]タブの各データベースの[Properties > Base ID]で値を割り当てることができます。
アクター、変数、会話などを追加すると、それらの内部IDはベースIDから番号付けを開始します。
例えば、グローバルデータベースのベース ID を 1、次のデータベースのベース ID を 10000、次のデータベースのベース ID を 20000 などに設定します。
これにより、データベース間での ID の競合が減り、Unique ID ツールを実行しなくてもプレイテストが容易になります。
ただし、最終テストとリリースの前に Unique ID ツールを実行して、IDの競合がないことを完全に確認する必要はあります。