ゲームでは戦闘終了後に取得経験値を表示させるなど、自身の設定した特定のタイミングで会話ログを表示させたい状況が発生することがあります。今回はそのような状況を想定し、下記「Unity基礎2」でも紹介したFungusを使い、好みのタイミングで会話ログを表示させる方法を紹介します。

準備
今回は戦闘画面で経験値取得に関する会話ログを表示させる処理を想定します。簡単のため、戦闘終了のトリガーの代わりとして戦闘画面にボタンを設置し、そのボタンが押された時に取得経験値を表示させるようにします。イメージとしては下に示すとおりです。

任意のタイミングで会話を表示させる方法
前提となる準備が整ったので、続いて任意のタイミングで会話を表示させる方法を説明していきます。
SREP1:表示させたい会話ログ起動条件の設定
起動条件の変更
先ずは会話ログの表示起動条件を変更します。具体的には下図のように、ヒエラルキーウィンドウ上のFlowchartから、タイミングを設定したい会話ログ表示のブロックを選択し、インスペクターウィンドウを表示させます。そして、ExecuteOnEvent部分をGameStartedからMessageReceivedに変更します。
会話ログ表示条件を設定
次に会話ログを表示させるトリガーとなる条件を設定します。具体的には以下に示すように、インスペクターウィンドウのMessage欄に会話ログを起動させるためのキーとなるメッセージを設定します。今回はBattleEndと設定しました。
STEP2:会話ログ表示のトリガーとなるメソッドを実装する
続いて会話ログ表示のトリガーとなるメッセージをFlowchartに渡すメソッドを実装します。今回の例ではボタンが押されたことが会話ログ表示のトリガーとなりますので、ボタンが押された時に呼び出されるメソッドがそれにあたります。
具体的には以下のようなスクリプトでFlowchartに「BattleEnd」というメッセージを渡します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Fungus;//Fungusを制御するために導入
public class BattleEnd : MonoBehaviour
{
[SerializeField] Flowchart ResultLog = null;//戦闘結果(取得経験値)を表示させる会話ログと連携
//戦闘終了 ボタンが押された時に呼び出されるメソッド
public void ClickBattleEndButton()
{
//会話ログを表示させるトリガーとなるメッセージをFlowchartに渡す処理
ResultLog.SendFungusMessage("BattleEnd");
}
}
上記スクリプトに関しての説明は下記の通りです。
7行目:このBattleEndクラスに会話ログを表示させるFlowchartを認識させるための構文。「ResultLog」と記述した部分は任意の名前でOK。
9行目~13行目:戦闘終了ボタンが押された時に呼び出されるメソッド。
12行目:特定のFlowchartに「BattleEnd」というメッセージを送る命令。
STEP3:スクリプトのオブジェクトへのアタッチとボタンクリック時動作設定
スクリプトのアタッチ
スクリプトを作成したらオブジェクトにスクリプトをアタッチします。今回は空オブジェクトであるGameManagerオブジェクトにBattleEndスクリプトをアタッチしました。(下図参照)
ボタンクリック時動作の設定
続いてボタンクリック時の動作設定を行います。具体的には下図のようにButtonオブジェクトのOnClick()に前述のClickBattleEndButtonメソッドを設定します。

STEP4:ResultLogが表すFlowchartと経験値取得ログを表示させるFlowchartを連携させる
最後に前述のスクリプトでメッセージが送られる対象となっているResultLogと、経験値取得ログを表示させるFlowchartを連携させます。要するに「ResultLogというのは経験値取得ログを表示させるFlowchartのことだよ」ということをUnityに認識させるということです。具体的な手順は以下に示すとおりです。
②インスペクターウィンドウのResultLogの枠に経験値取得ログを表示させるFlowchartオブジェクトをドラッグ&ドロップする
機能テスト
ここまでできたらPlayボタンを押してゲームを起動させ、処理が想定どおりに行われているか確認しましょう。実際に起動させてみた結果、下図のように会話ログが表示されていない状態から、戦闘終了ボタンをクリックすると経験値取得ログが表示されました。
今回はFungusを使って、任意のタイミングで会話ログを呼び出す方法について説明しましたが、いかがだったでしょうか。今回も前回同様、経験値取得を例に説明しましたが、例えばエネミーの遭遇した際の処理なども「エンカウント計算処理→エンカウントを表す会話ログ表示」といった処理が必要になることもあると思いますので、皆様のゲームの製作でも役立つのではないかと思います。ぜひ参考にしていただければと思います。
以上。
コメント