本日は DialogueSystem の勉強枠です。
DialogueSystem のトリガーとインタラクションを確認しながら記事にします。
今回は Dialogue System Trigger についてです。
Dialogue System for Unity
Dialogue System for Unity は会話イベントや吹き出しを Unity で簡単に実装できる有料アセットです。
Cinemachine や Input System などのライブラリにも対応しており、様々な機能やサンプルUIを提供します。
assetstore.unity.com
Dialogue Systemのトリガーとインタラクションの使い方
DialogueSystem には開発に役立つドキュメントページが用意されています。
今回は以下のトリガーとインタラクションの使い方のページを翻訳します。
www.pixelcrushers.com
前提条件
事前に Dialogue System のインポートを行った Unity プロジェクトを作成してください。
詳細な手順は以下の記事のアセットのインポートを参照ください。
bluebirdofoz.hatenablog.com
Dialogue System Trigger
Dialogue System Trigger コンポーネントには次の 3 つの主要部分があります。
・Trigger:ダイアログシステムトリガーを起動するイベント
・Conditions:ダイアログシステムトリガーがそのアクションを実行するために真でなければならない状態
・Actions: 会話の開始やクエスト状態の設定などトリガーが行うこと
Trigger
[Trigger]ではドロップダウンを次の値に設定できます。
それぞれのトリガーの実行タイミングは以下の通りです。
On Use
以下のタイミングで実行されます。
・プレイヤーの Selector または近接 Selector がゲームオブジェクトに OnUse メッセージを送信した
・DialogueSystemTrigger の OnUse() メソッドが UnityEvent またはスクリプトで手動で呼び出された
On Start
シーンの開始時などコンポーネントが起動したタイミング。
SaveSystem を使用している場合、SaveSystem がセーブデータを適用する前にトリガーが開始されることがあります。
代わりに OnSaveDataApplied を使用するか、以下のコードを設定します。
DialogueManager.onStartTriggerWaitForSaveDataApplied = true
On Save Data Applied
SaveSystem がシーンにセーブデータを適用したか、それと同等のフレーム数が経過したタイミング。
On Enable
コンポーネントが有効になったタイミング。
On Disable
コンポーネントが無効になったタイミング。
On Destroy
コンポーネントが破棄されたタイミング。
On Trigger Enter
コンポーネントが OnTriggerEnter メッセージを受信したタイミング。
このトリガーを使用するにはコンポーネントのゲームオブジェクトにトリガーコライダーが必要です。
[Conditions -> Accepted Tags]を設定して、このトリガーを Player などの特定のタグを持つゲームオブジェクトに制限することができます。
On Trigger Exit
コンポーネントが OnTriggerExit メッセージを受信したタイミング。
On Collision Enter
コンポーネントが OnCollisionEnter メッセージを受信したタイミング。
On Collision Exit
コンポーネントが OnCollisionExit メッセージを受信したタイミング。
On Bark Start
ゲームオブジェクトは Bark(単発台詞) を再生し始めたタイミング。
On Bark End
ゲームオブジェクトが Bark の再生を終えたタイミング。
On Conversation Start
ゲームオブジェクトが会話の主要な参加者として会話し始めたタイミング。
On Conversation End
ゲームオブジェクトが会話し終えたタイミング。
On Sequence Start
ゲームオブジェクトがカットシーンシーケンスの主要な参加者として開始したタイミング。
このイベントはダイアログマネージャーの[Subtitle Settings-> Inform Sequence Start And End]チェックボックスにチェックを入れていない限り、呼び出されません。
On Sequence End
ゲームオブジェクトがシーケンスを終了したタイミング。
Conditions
Conditions を使用すると Dialogue System Trigger を起動するために真でなければならない状態を指定できます。
Quest Conditions
必須のクエスト状態を指定します。
Accepted Tags
[Trigger]が OnCollision イベントまたは OnTrigger イベントの場合、他のゲームオブジェクトに必要なタグを指定します。
Accepted Tags が空の場合、全てのゲームオブジェクトが許可されます。
Accepted GameObjects
[Trigger]が OnCollision イベントと OnTrigger イベントの場合、許可する他のゲームオブジェクトをリストで指定します。
Accept GameObjects が空の場合、全てのゲームオブジェクトが許可されます。
Actions
アクションを追加するには[Add Action]ボタンをクリックします。次のアクションを追加できます。
Show Alert
ダイアログ UI に警告メッセージを表示します。
Send Messages
Unity の SendMessage() メソッドを使用してターゲットにメッセージを送信します。
Bark
ゲームオブジェクトで Bark(単発台詞) を再生します。
Start Conversation
会話を開始します。
Set GameObjects Active/Inactive
ゲームオブジェクト全体のアクティブ/非アクティブを切り替えます。
Set Components Enabled/Disabled
ゲームオブジェクトの特定のコンポーネントのアクティブ/非アクティブを切り替えます。
Set Animator States
ゲームオブジェクトにアニメーターの状態を設定します。
会話開始時にキャラクターをアイドル状態にするのに便利です。
OnExecute() UnityEvent
UnityEvent を使用して他のアクションを指定できます。
キャラクターゲームオブジェクトの割り当て
ランタイム会話で使用されるアクターゲームオブジェクトはダイアログデータベース内の会話に割り当てられたアクターと同じである必要はありません。
以下にキャラクターゲームオブジェクトの割り当てについて説明します。
会話アクターと会話
ダイアログエディターで会話を作成するときはダイアログデータベースのアクターのリストからアクターと会話を割り当てます。
通常、操作者するオブジェクトがプレイヤーであり、会話相手は会話に関与する NPC です。
会話のアクターと会話内容を表示または変更するには空のキャンバススペースをクリックして会話のプロパティを調べます。
ダイアログエントリノードのアクターと会話
ダイアログエントリノードを追加すると、エディタは自動的にアクターと会話相手をノードに割り当てます。
ノードのアクター(actor)は話しているキャラクターです。会話相手(conversant)は話しかけられているキャラクターです。
ノードのアクターまたは会話相手を変更するには、ノードをクリックしてそのプロパティを調べます。
ダイアログシステムトリガーのアクターと会話
ダイアログシステムトリガーを設定すると、ゲームオブジェクトを[Conversation > Conversation Actor または Conversation Conversant]フィールドに割り当てることができます。
これらのゲームオブジェクトはダイアログデータベース内の会話に割り当てられたアクターとは異なるアクターを指定することができます。
会話に割り当てられたアクターと一致しない場合でも、指定したゲームオブジェクトを使用して会話します。
これにより、異なるキャラクターの会話を再利用できます (例えば、ゲームワールドの全ての店主に同じ店主の会話を再利用できます)。
ヒント
ダイアログデータベースでは「Shopkeeper」という名前の汎用アクターを作成し、「こんにちは、私は[var=Conversant]です」などの一般的な会話を作成できます。
次に各村の店主に同じ店主の会話を再利用し、特定の村の店主を会話会話フィールドに割り当てます
会話アクター(Conversation Actor)
[Conversation Actor]フィールドを割り当てない場合、ダイアログシステムトリガーは適切なゲームオブジェクトを選択しようとします。
会話相手(Conversation Conversant)
[Conversation Conversant]フィールドを割り当てない場合、ダイアログシステムトリガーは適切なゲームオブジェクトを選択しようとします。
- 会話相手と一致する Dialog Actor コンポーネントを持つゲームオブジェクトを探します。
- それができない場合はダイアログシステムトリガーゲームオブジェクトを使用します。
その他の参加者
ダイアログエントリノードに会話の主要アクターまたは会話相手のアクターに割り当てられている場合、ノードのアクターと一致する Dialog Actor コンポーネントを持つゲームオブジェクトを探します。
これに失敗するとノードのアクターと一致する名前のゲームオブジェクトが検索されます。
次はその他のトリガーコンポーネントについてです。
bluebirdofoz.hatenablog.com