[UNITY]2DRPG開発日誌 #62 Fungusで「ブロック(SayDialog)が開始された/終了した」を検知する方法

Fungus

RPGでFungusを使う場合、「会話中はプレイヤーの移動を止めたい」「会話中はTimeScaleを0にしたい」などという場合がありますよね。

しかし、Fungusには「ブロックが始まったよ/終わったよ」「SayDialogがアクティブだよ/非アクティブだよ」というboolのフラグがありません。

なので、そういった「会話中」を取得したい場合はFungusのスクリプトを書き換える必要があります。

まずはプロジェクトウインドウから Fungus -> Scripts -> Components フォルダのFlowchart.csを開き、クラスの一番上にでもboolの変数をpublicで定義しておきましょう。

    public class Flowchart : MonoBehaviour, ISubstitutionHandler
    {
        //「ブロックが実行中」フラグ
        public bool isExecutingBlock;

こんな感じでOKです。

次に、同フォルダ内のBlock.csを開き、この部分

        public virtual IEnumerator Execute(int commandIndex = 0, Action onComplete = null)
        {            
            //以下省略

これが「ブロックが始まった」時に呼ばれるメソッドなので、ここで先ほどのフラグをONにします。

        public virtual IEnumerator Execute(int commandIndex = 0, Action onComplete = null)
        {
            //「ブロックが実行中だよ」フラグをON
            Flowchart fc = GameObject.FindWithTag("Flowchart").GetComponent<Flowchart>();
            fc.isExexutingBlock = true;
            Debug.Log(this + ": 始まったよ");

こんな感じです。

次に、同スクリプト内のこの部分

        private void ReturnToIdle()
        {
            //以下省略

これが「終わった」時に呼ばれるメソッドなので、フラグをOFFにします。

        private void ReturnToIdle()
        {
            //「ブロックが実行中だよ」フラグをOFF
            Flowchart fc = GameObject.FindWithTag("Flowchart").GetComponent<Flowchart>();
            fc.isExexutingBlock = false;
            Debug.Log(this + ": 終わったよ");

こんな感じに追加します。

あとは、Flowchartコンポーネント内の isExexutingBlock を取得すればOKです。

タイトルとURLをコピーしました