今回はUnityで簡単にダイアログのような、メッセージボックスを作ってみます。
はじめに
「Unity 2020.3.26f1」ヴァージョンで作成しています。
ダイアログというよりは「簡単なメッセージボックス」に近い感じですかね。
実装開始
「画面作成」→「スクリプト作成」→「調整」の順番で行います。
画面作成
新規でシーン作成。「UI」→「Text – TextMeshPro」を追加。
「Text」でも良いけど「TextMeshPro」の方が簡単に細かい調整ができる印象。

下記画面が出てくるので「Import TMP Essentials」を押す。


Canvasが追加されるので、キャンバスのスケールを変更します。実際のゲーム画面に合わせる感じで。

表示位置(アンカー)を調整。今回は左上に表示します。ShiftとAltを押しながら左上を選択。

ポジション(表示位置)を微調整します。

文字サイズや文字間隔を少し変更。

表示メッセージを適当に入力し、幅と高さを調節。

これでざっくりと画面完成。
スクリプト作成
次に、スクリプトでメッセージを制御していきます。
空のオブジェクトを追加して名前を「DialogManager」に、同じ名前のスクリプトを「AddComponent」。

スクリプトの中身は下記に変更
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class DialogManager : MonoBehaviour { [SerializeField] private TextMeshProUGUI DialogText; [TextArea] [SerializeField] private string msgText; void Start() { DialogText.text = msgText; }
パラメータを設定すれば完成。表示メッセージを変更したい場合はMsgText変数を変更。

「TextArea」は下記の様に表示サイズを変えた方が画面上で見やすいかも。
[TextArea(5,5)]
メッセージを一瞬で全部表示するのではなく、タイピングするように順番に表示する場合は下記の様なスクリプト。msgSpeedでタイピングするスピードを変更。
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class DialogManager : MonoBehaviour { [SerializeField] private TextMeshProUGUI DialogText; [TextArea(5,5)] [SerializeField] private string msgText; private float msgSpeed = 0.01f; void Start() { DialogText.text = ""; StartCoroutine(TypeDisplay()); } IEnumerator TypeDisplay() { foreach (char item in msgText.ToCharArray()) { DialogText.text += item; yield return new WaitForSeconds(msgSpeed); } } }
調整
背景(枠)を設定してみたり

ボタンを設置してメッセージを閉じるようにしたり。

ボタンクリックでダイアログを無効に。

下記の様な感じに。ボタン感やメッセージ感がなくて、見た目は適当な感じですが・・・

固定のメッセージの場合、下記の様にスクリプトに直書きしてもよいかも。
// [TextArea(5,5)] // [SerializeField] private string msgText; private string msgText = "dialog message display" + System.Environment.NewLine + "This dialog is sample..." + System.Environment.NewLine + "AAAA BBBB CCCC DDDD";
Startでメッセージを呼び出しているので、任意のタイミングに変更すれば完成。