Unity で 2DRPG 作りに奮闘してます。
今回は、プロローグ終了後に主人公の紹介シーンを Fungus を使って作成してみました。
Fungus とは
Fungus は Unity のアセットです。
セリフやキャラクターの立ち絵の表示、選択肢による分岐といったコマンドが豊富に用意されているので、とても便利です。
設定メモ
- 「Fungus」の「Flowchart」の設定
- 「Fungus」の「Caracter」の設定(メッセージウィンドウにキャラクタ表示)
- 「Fungus」の「View」の設定(背景の表示)
- 紹介用スクリプトを作成
FungusのFlowchartを作成
メニューの「Create」→「Flowchart」を選択します。
「Flowchart」が作成されると、「Hierarchy」に「Flowchart」が作成されます。
メニューの「Open Flowchart Window」を選択するとFlowchartビューが開きます。
(はじめはこのウィンドウは空です)
FungusのFlowchartで文章を入力
右クリックすると選択項目がでるので「Add Block」を選びます。
Inspectorビューに「Block Name」という欄があり、ここでブロックの名前を変えられます。
「+」ボタンを押すとコマンドの一覧が出てきます。
「Narrative/Say」を選択します。
絞り込み用のボックスがあるので「say」というキーワードを入れると簡単に見つけられます
「Fungus」の「Caracter」の設定
メニューの「Create」→「Character」を選びます。
「Name Text」欄にキャラクターの名前を入力します。
「Sound Effect」欄に音の設定を追加します。
「Portraits」に絵の設定を追加します。
FungusのViewの設定(背景の表示)
メニューの「Create」→「View」を選択します。
背景画像が収まるように調整します。
「Flowchart」から「Camera/Fade To View」を選択します。
「Target View」に先ほど作成したViewを追加します。
紹介用スクリプト
紹介用スクリプトは以下の処理を行います。
コントローラや主人公の「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」に引き渡すキーワードをしています。
紹介スクリプト終了後に遷移するシーン名を記入します。