ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

【Unityで2DRPG】 Fungusを使ってキャラクター紹介シーンを作成してみる (猫の冒険)

Unity で 2DRPG 作りに奮闘してます。
今回は、プロローグ終了後に主人公の紹介シーンを Fungus を使って作成してみました。

f:id:a1026302:20201125223300g:plain

Fungus とは

Fungus は Unity のアセットです。
セリフやキャラクターの立ち絵の表示、選択肢による分岐といったコマンドが豊富に用意されているので、とても便利です。

設定メモ

  • 「Fungus」の「Flowchart」の設定
  • 「Fungus」の「Caracter」の設定(メッセージウィンドウにキャラクタ表示)
  • 「Fungus」の「View」の設定(背景の表示)
  • 紹介用スクリプトを作成

FungusのFlowchartを作成

メニューの「Create」→「Flowchart」を選択します。
f:id:a1026302:20201125212244j:plain
「Flowchart」が作成されると、「Hierarchy」に「Flowchart」が作成されます。
f:id:a1026302:20201125212735j:plain
メニューの「Open Flowchart Window」を選択するとFlowchartビューが開きます。
(はじめはこのウィンドウは空です)
f:id:a1026302:20201125212953j:plain

FungusのFlowchartで文章を入力

右クリックすると選択項目がでるので「Add Block」を選びます。
f:id:a1026302:20201125213247j:plain
Inspectorビューに「Block Name」という欄があり、ここでブロックの名前を変えられます。
f:id:a1026302:20201125214215j:plain
「+」ボタンを押すとコマンドの一覧が出てきます。
「Narrative/Say」を選択します。
絞り込み用のボックスがあるので「say」というキーワードを入れると簡単に見つけられます
f:id:a1026302:20201125214801j:plain

「Fungus」の「Caracter」の設定

メニューの「Create」→「Character」を選びます。
f:id:a1026302:20201125215332j:plain
「Name Text」欄にキャラクターの名前を入力します。
「Sound Effect」欄に音の設定を追加します。
「Portraits」に絵の設定を追加します。

FungusのViewの設定(背景の表示)

メニューの「Create」→「View」を選択します。
f:id:a1026302:20201125221901j:plain
背景画像が収まるように調整します。
f:id:a1026302:20201125221840j:plain
「Flowchart」から「Camera/Fade To View」を選択します。
f:id:a1026302:20201125222754j:plain
「Target View」に先ほど作成したViewを追加します。
f:id:a1026302:20201125222307j:plain

紹介用スクリプト

紹介用スクリプトは以下の処理を行います。
コントローラや主人公の「GameObject」は「DontDestroyOnLoad」を使って生成されるため、各「GameObject」を「GameObject.Find」で探し出します。
メッセージウィンドウとコントローラが重ならないように、コントローラとプライヤーの「GameObject」はメッセージウィンドウ表示前に非表示にして会話終了後に表示に戻す。
処理の最後に次のシーンに切り替えます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using Fungus;

public class Introduce : MonoBehaviour
{
    public string nextGameScene;

    [SerializeField]
    string message = "";
    public GameObject player;
    Flowchart flowChart;
    

    void Start()
    {
        flowChart = GetComponent<Flowchart>();
        StartCoroutine(_Introduce()); 
    }

    private void SetController(bool check)
    {
        GameObject controller = GameObject.Find("ControllerCanvas(Clone)");
        GameObject joystick = controller.transform.Find("Fixed Joystick").gameObject;
        joystick.gameObject.SetActive(check);
    }

    IEnumerator _Introduce()
    {   
        player = GameObject.Find("Player(Clone)");
        player.SetActive(false);
        SetController(false);

        flowChart.SendFungusMessage(message);
        yield return new WaitUntil(() => flowChart.GetExecutingBlocks().Count == 0);

        SetController(true);
        player.SetActive(true);
        SceneManager.LoadScene(nextGameScene);
    }
}

紹介用スクリプトの設定

「Message Received」の「Message」に引き渡すキーワードをしています。
紹介スクリプト終了後に遷移するシーン名を記入します。
f:id:a1026302:20201125185250j:plain