【Unity基礎6】任意のタイミングで会話を表示させる方法〜Fungusの使い方③〜

Unity基礎

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

【Unity基礎2】会話シーンの実装方法〜Fungusの使い方①〜
今回はUnityの無料AssetであるFungusを使った会話の実装方法について説明します。

準備

 

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

ボタンに関する処理以外については下記「Unity基礎5」で作成したプロジェクトをベースにしますので、必要に応じてそちらもご覧ください。
【Unity基礎5】会話終了後にメソッドを呼び出す方法〜Fungusの使い方②〜
今回は会話終了後にメソッド呼び出しが必要な状況(経験値取得の会話ログ表示後に探索画面へ戻る等)を想定し、Fungusを使って、会話ログを表示させた後にメソッドを呼び出す方法を紹介します。

任意のタイミングで会話を表示させる方法

 

前提となる準備が整ったので、続いて任意のタイミングで会話を表示させる方法を説明していきます。

SREP1:表示させたい会話ログ起動条件の設定

起動条件の変更

先ずは会話ログの表示起動条件を変更します。具体的には下図のように、ヒエラルキーウィンドウ上のFlowchartから、タイミングを設定したい会話ログ表示のブロックを選択し、インスペクターウィンドウを表示させます。そして、ExecuteOnEvent部分をGameStartedからMessageReceivedに変更します。

上記手順によりFlowchartが特定のMessage(メッセージ)を受け取ることで会話ログが表示されるようになります。
会話ログ表示条件を設定

次に会話ログを表示させるトリガーとなる条件を設定します。具体的には以下に示すように、インスペクターウィンドウのMessage欄に会話ログを起動させるためのキーとなるメッセージを設定します。今回はBattleEndと設定しました。

これでFlowchartが「BattleEnd」というメッセージを受け取った際、指定した会話ログブロックが起動し、経験値取得に関する会話ログが表示されるようになります。

STEP2:会話ログ表示のトリガーとなるメソッドを実装する

続いて会話ログ表示のトリガーとなるメッセージをFlowchartに渡すメソッドを実装します。今回の例ではボタンが押されたことが会話ログ表示のトリガーとなりますので、ボタンが押された時に呼び出されるメソッドがそれにあたります。

具体的には以下のようなスクリプトでFlowchartに「BattleEnd」というメッセージを渡します。

ここではBattleEndという名前でスクリプトを作成し、ClickBattleEndButtonというメソッドを作成しました。
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");
    }
}

上記スクリプトに関しての説明は下記の通りです。

4行目:Fungusを制御するための命令を使用するために導入。具体的には7行目のFlowchartクラスと12行目のSendFungusMessageを使用するために導入が必要。
7行目:このBattleEndクラスに会話ログを表示させるFlowchartを認識させるための構文。「ResultLog」と記述した部分は任意の名前でOK。
9行目~13行目:戦闘終了ボタンが押された時に呼び出されるメソッド。
12行目:特定のFlowchartに「BattleEnd」というメッセージを送る命令。

 

この段階ではまだResultLogが表すFlowchartが何であるかは認識できていません。ResultLogが表すFlowchartと経験値取得ログを表示させるFlowchartを連携させるにはSTEP4で示す手順が必要です。

STEP3:スクリプトのオブジェクトへのアタッチとボタンクリック時動作設定

スクリプトのアタッチ

スクリプトを作成したらオブジェクトにスクリプトをアタッチします。今回は空オブジェクトであるGameManagerオブジェクトにBattleEndスクリプトをアタッチしました。(下図参照)

ボタンクリック時動作の設定

続いてボタンクリック時の動作設定を行います。具体的には下図のようにButtonオブジェクトのOnClick()に前述のClickBattleEndButtonメソッドを設定します。

ボタンクリック時の動作設定方法について詳しく知りたい場合は、下記「Unity基礎3」をご覧ください。
【Unity基礎3】画面遷移機能をボタンに実装する
今回はUnityでボタンが押された時に、別の画面を遷移(移動)する機能の実装について説明します。

STEP4:ResultLogが表すFlowchartと経験値取得ログを表示させるFlowchartを連携させる

最後に前述のスクリプトでメッセージが送られる対象となっているResultLogと、経験値取得ログを表示させるFlowchartを連携させます。要するに「ResultLogというのは経験値取得ログを表示させるFlowchartのことだよ」ということをUnityに認識させるということです。具体的な手順は以下に示すとおりです。

①BattleEndスクリプトがアタッチされているGameManagerオブジェクトをクリック
②インスペクターウィンドウのResultLogの枠に経験値取得ログを表示させるFlowchartオブジェクトをドラッグ&ドロップする

 

機能テスト

 

ここまでできたらPlayボタンを押してゲームを起動させ、処理が想定どおりに行われているか確認しましょう。実際に起動させてみた結果、下図のように会話ログが表示されていない状態から、戦闘終了ボタンをクリックすると経験値取得ログが表示されました。

今回はFungusを使って、任意のタイミングで会話ログを呼び出す方法について説明しましたが、いかがだったでしょうか。今回も前回同様、経験値取得を例に説明しましたが、例えばエネミーの遭遇した際の処理なども「エンカウント計算処理→エンカウントを表す会話ログ表示」といった処理が必要になることもあると思いますので、皆様のゲームの製作でも役立つのではないかと思います。ぜひ参考にしていただければと思います。

以上。

-ゲームアプリ「HelloAnotherWorld」ダウンロードのお願い-

私が作成したゲームアプリ「HellowAnotherWorld」をダウンロードしていただけると嬉しいです。
有料ではありますが、ペットボトル飲料一本分程度の値段ですので、是非お願いします。
皆様にもメリットがあり、「このサイトで勉強すればこの程度のアプリであれば自分一人で作成できるようになる」という一つの目安にもなるかと思います。

-ゲームアプリ「HelloAnotherWorld」ダウンロードのお願い-

私が作成したゲームアプリ「HellowAnotherWorld」をダウンロードしていただけると嬉しいです。
有料ではありますが、ペットボトル飲料一本分程度の値段ですので、是非お願いします。
皆様にもメリットがあり、「このサイトで勉強すればこの程度のアプリであれば自分一人で作成できるようになる」という一つの目安にもなるかと思います。

スポンサーリンク
HelloAnotherWorld
HelloAnotherWorld
¥120
posted withアプリーチ
Unity基礎
ソフィーのUnity講座

コメント