これは、プレイヤーと NPC が動的に対話できるようにするダイアログ システムです。
このシステムを使用すると、ユーザーは、1 つのインスペクターウィンドウ内で、メッセージ効果、シンプルなアニメーション、Unityイベントを備えた魅力的な会話を作成できます。
システムをセットアップするには、少なくとも 2 つのコンポーネントが必要です。
キャラクターの会話を保存する Dialogue と、ダイアログを表示する UI 要素を管理する DialogueUI です。
Dialogue は空のゲーム オブジェクトにアタッチできますが、DialogueUI は UI キャンバスに配置する必要があります。
また、LetsWiggle コンポーネントを使用して移動やスケーリングなどの追加効果を利用したり、TextMeshProEffects を使用してタイプライティング効果を利用したりして、全体的なエクスペリエンスを向上させることもできます。
Note
ダイアログが開始されると、プレイヤーの入力は自動的にブロックされます。
Property | |
---|---|
DialogueUI | DialogueUI への参照。 |
Exit Button | このボタンが存在する場合、ユーザーはどのダイアログも回避できます。 |
Skip Button | このボタンが存在する場合、ユーザーはいつでも会話内の次のメッセージにスキップできます。 |
Block Inventories | 有効にすると、開こうとするインベントリはすべて開くことがブロックされます。 |
Messenger Icon Relative | 有効にすると、メッセンジャーの相対的な位置に応じて、メッセンジャー アイコンがメッセージ ボックスの左側または右側に配置されます。 |
Is Random | 有効にすると、ランダムな会話が表示されます。これが必要な場合は、ランダムとして扱う必要がある会話ごとに、各会話に存在する Is Random フラグを有効にします。 |
Events | プレイヤーが会話を開始および終了するときに呼び出される Unity イベント。 |
Method | |
---|---|
BeginConversation() | 会話を開始するには、このメソッドを呼び出します。これにより、このゲームオブジェクトがアクティブに true に設定されます。 |
EndConversation() | 会話を終了するには、このメソッドを呼び出します。 |
ダイアログに関連するメッセンジャーを作成します。
Property | |
---|---|
Messenger Bar | メッセンジャーのスプライト アイコンと表示名を選択します。ここから、必要に応じてこのメッセンジャーを削除し、ボックスを開いてその他のフィールドを表示します。 |
Transform | 位置アイコンが有効になっている場合は、メッセンジャーの変換を指定して、他のメッセンジャーとの位置を比較します。 |
Background | これはオプションです。このメッセンジャーの個人用背景画像を選択します。空白のままにすると、代わりにデフォルトの背景が使用されます。 |
Create Animation | 適用すると、メッセンジャーのアイコンがアニメーションに置き換えられます。アニメーションに名前を付けて作成します。必要な数だけ作成します。作成すると、各アニメーションに、アニメーションに個々のスプライトを追加するための追加ボタンが表示されます。 |
FPS | 1 秒あたりのフレーム数。アニメーションが再生される速度。 |
Loop | これを有効にすると、アニメーションがループします。これは、単純な会話アニメーションに役立ちます。 |
会話の状態を保存することも可能です。重要なイベントが発生すると、会話を別の状態に進めて、プレイヤーと NPC が新しい会話を続けることができます。
Property | |
---|---|
Save Key | このキーは会話の状態を保存します。このキーはゲーム全体で一意である必要があります。削除ボタンを押すと、保存状態がゼロにリセットされます。 |
Conversation List | 会話を追加するには、追加ボタンをクリックします。リスト内の各会話は、プレイヤーと NPC が会話を開始する会話状態を表します。重要なイベントが発生したら、このコンポーネントで SaveConversationState ( ) を呼び出します。これはどこからでも呼び出すことができます。次にダイアログ ウィンドウが開いたときに、リスト内の次の会話が続行されます。 |
ダイアログは一連の会話です。必要な数だけ作成してください。各会話には一連のメッセージが含まれます。
各メッセージは、メッセージまたは選択肢のいずれかのタイプにすることができます。
選択肢タイプが有効になっている場合は、プレイヤーに選択を求め、選択肢の各オプションが別の会話に分岐するため、会話の最後のメッセージにする必要があります。
現在の会話がメッセージタイプの最後のメッセージに達すると、ダイアログは終了します。
Property | |
---|---|
Conversation Bar | 会話の名前が表示されます。ここから、必要に応じて会話を削除したり、新しいメッセージを追加したり、ボックスを開いてその他のフィールドを表示したりできます。 |
Name | 会話名 |
Is Random | 有効にすると、この会話はランダムな会話として扱われます。 |
Message Bar | メッセンジャーのアイコンが表示されます。どのメッセンジャーが話しているか、メッセージの種類を選択します。ここから、必要に応じてメッセージを削除するか、ボックスを開いてさらにフィールドを表示します。 |
Animation | 有効にする場合は、会話中に再生する必要があるアニメーションの名前を入力します。 |
Message To | アイコンの位置が有効になっている場合は、メッセージが配信される相手を指定して、システムが UI アイコンをどのように配置するかを認識できるようにします。 |
On Message Complete | メッセージの読み込みが完了した後に呼び出される Unity イベント。 |
Message Type | 有効にすると、標準メッセージが表示されます。テキスト ボックスに希望のメッセージを入力します。 |
Choice Type | 有効にした場合、赤いボタンを押すと、プレーヤーが選択できる一連のオプションが作成されます。通常、オプションは UI ボタン要素にマップされるため、オプションの応答はできるだけ短くする必要があります。 |
Branch To | プレイヤーがこのオプションを選択した場合、これが次の会話になります。 |
On Choice | プレイヤーがこのオプションを選択した場合、これが呼び出される Unity イベントになります。 |
Note
対話が開始されると、リストの最初の会話がエントリポイントになります。
DialogueUI
システムはダイアログ ボックスを表示するために Unity の UI システムを実装します。ダイアログ ボックスの UI 要素は、個人の好みに合わせて構成できます。重要なのは、UI 参照を設定して、システムがいつそれらを有効にしてコンテンツを設定するかを知るようにすることです。
デモには基本的な UI ダイアログ構造が含まれており、他のデザインの開始点として使用できますが、一般的に、システムはアイコン イメージ、背景イメージ、次の信号イメージ、メッセージ自体の TextMeshPro、およびメッセンジャーの名前という 5 つの基本要素を探します。不足している UI 要素がある場合、システムはそれを無視します。実際には、これらのうち本当に必要なのは 1 つだけで、それはメッセージ要素です。したがって、ダイアログ ボックスは必要に応じて複雑または単純に構成できます。
References | |
---|---|
Icon | メッセンジャーのアバター(またはアニメーション)の画像。 |
Background | メッセージ全体の画像背景。この画像は、ダイアログ コンポーネント内の各メッセンジャーごとにカスタマイズできます。この UI 要素は、ダイアログ ボックスのメイン コンポーネントと見なす必要があります。他のすべての UI 要素は、この子要素になります。 |
Next Signal | メッセージが完全に読み込まれると表示される画像で、ユーザーに会話を続けるよう通知します。LetsWiggle を使用してバウンス効果を実装します。 |
Message | The TextMeshPrメッセージの TextMeshPro。 |
Messenger Name | メッセンジャーの名前の TextMeshPro。 |
Choices | 会話の選択肢にマップされたボタン。必要な数だけ作成します。これらのボタンは、ユーザーによってクリックまたは押されます。 |
以下の Unity イベントはオプションです。使用しない場合、メッセージはすぐに読み込まれます。ただし、使用すると、ダイアログに特殊効果を追加できます。ただし、適切に接続することが非常に重要です。そうしないと、ダイアログ システムが正しく動作しません。
システムには、ダイアログ ボックスに効果を追加する非常に便利なクラスが 2 つ付属しています。LetsWiggle は、インスペクターで使用して、UI の移動やスケーリングなどのトゥイーンを設定するために使用できるトゥイーン ライブラリです。TextMeshProEffects は、タイプライティングやウォブル効果などの特殊効果をメッセージに追加します。これらのクラスは、OnTransitionIn、OnTransitionOut、および On Load Message に使用できます。これらのクラスは、背景の UI 要素に配置する必要があります。
Property | |
---|---|
On Begin | ダイアログの開始時に呼び出される Unity イベント。 |
On End | ダイアログが終了したときに呼び出される Unity イベント。 |
On Transition In | 新しいメッセージが始まる直前に、この Unity イベントを呼び出します。 想定される動作: このイベントは、トゥイーンライブラリなどの別のクラスを呼び出して、背景画像を移動または拡大縮小する必要があります。 この場合、トランジションインなので、背景画像は 0 から 1 に拡大縮小できます。 完了したら、この別のクラスが DialogueUI で TransitionInComplete を呼び出すことが非常に重要です。 このイベントを使用する場合は、システムが先に進めることができることを知らせる戻り信号が常に存在する必要があります。そうしないと、システムは停止したままになります。 |
On Transition Out | メッセージが終了したら、この Unity イベントを呼び出します。これは On Transition In とまったく同じように動作しますが、逆の動作になります。重要なのは、完了したら他のクラスが DialogueUI で TransitionOutComplete を呼び出すことです。 |
On Load Message | Transition In が完了すると、この Unity イベントが呼び出されます。 通常は、メッセージ自体に特殊効果を追加するクラスを呼び出します。 前の 2 つのイベントと同様に、他のクラスが完了すると、DialogueUI で MessageLoadingComplete を呼び出して完了信号を返す必要があります。そうしないと、システムが停止します。 |
Warning
OnTransitionIn、OnTransitionOut、または OnLoadMessage を使用する場合は、Unity イベントを適切に設定することが非常に重要です。適切に設定しないと、システムが停止してしまいます。