MRが楽しい

MRやVRについて学習したことを書き残す

DialogueSystemのトリガーとインタラクションの使い方 その3(Barkと2D物理演算サポート)

本日は DialogueSystem の勉強枠です。
DialogueSystem のトリガーとインタラクションを確認しながら記事にします。
今回は Bark と2D物理演算サポートについてです。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

Bark(単発台詞)

会話は通常アクターがセリフを言い、次に会話相手がセリフを言うという前後の流れがあります。
Barks はプレイヤーの応答メニューや前後を含まない1回限りのセリフです。
これは通常 NPC が雰囲気を出すために話したり(例:「今日はいい天気だね」)、NPC の状態をプレイヤーに伝えるために話したりします(例:「リロード中!」)。

Barkの作成

Bark を作成するには全てのエントリを START ノードの子として追加します。つまりツリーの深さは 1 レベルのみです。
アクターが Bark を行うと、ダイアログシステムはSTARTノードのすべての子を評価して、現在有効なエントリのリストを生成します。
次にこのリストからエントリを選択してセリフを発します。

Bark のエントリに条件を設定することで現在のゲームの状態を認識できます。
例えば、NPC は体力レベルに基づいて様々なセリフを発することができます。

Barkの優先度

Bark エントリに優先度レベルを指定して、優先度の低いエントリが高いエントリを妨害しないようにすることができます。
これを行うには[Priority]という名前のカスタム数値フィールドをダイアログエントリに追加します。値が大きいほど優先順位が高くなります。

各エントリにこのカスタムフィールドを追加したい場合は[Templates]タブでテンプレートに追加できます。
ダイアログエントリに[Priority]がない場合は、デフォルト値の 0 が使用されます。
Bark がトリガーされたときに NPC が既に Bark を再生している場合、Dialogue System は新しい Bark の優先度が現在の Bark の優先度以上の場合にのみ、新しい Bark を再生するために再生中の Bark を中断します。

Barkの表示

Barks は Dialogue UI を使用しません。
Bark は Bark UI を使って再生され、通常は NPC の頭の上にテキストとして、および NPC のオーディオ ソースを介して再生されるオーディオとして実行されます。

Barkグループ

グループ内の1人の Bark 発言者のみに Bark を表示したい場合、Bark Group Member コンポーネントを追加してメンバーとして設定します。
例えばグループの1人のメンバーが Bark を行うと、他のメンバーはアクティブな Bark を非表示にして、画面上の混雑を軽減します。

Bark Group Member コンポーネントの[Queue Barks]チェックボックスをオンにすると、他のメンバーが Bark するとき、すぐに再生して他のメンバーの Bark を上書きするのではなく、他のメンバーの後に再生するために Bark の実行をキューに入れます。

2D物理演算サポートを有効にする

Dialogue System は2D物理演算(Physics2D)もサポートしています。
Unity では2D物理演算パッケージ(Physics2D)を有効または無効にすることができるため、Dialogue System のコードはプロジェクトで Physics2D が利用することを前提としていません。
Physics2D を利用する場合、Welcome Window(Tools -> Pixel Crushers -> Dialogue System -> Welcome Window)を開き、[Enable 2D Physics]にチェックを入れるか。
メニューから[Crushers -> Common -> Misc -> Enable Physics2D Support...]を選択します。

注: Unity 2017 以前を使用している場合、このメニュー項目は表示されません。

手動で2D物理演算サポートを有効にする場合、メニューから[Edit -> Project Settings]の[Player]タブを開き、[Scripting Define Symbols]を追加します。

USE_PHYSICS2D