Posted at

Unityでノベルゲームのように1文字ずつ表示する

More than 1 year has passed since last update.

こんにちは、今回はタイトル通りノベルゲームのように1文字ずつ文字を表示する簡単なやり方を説明します。

今回は本当に文字を出すだけで途中中断、文字色、サイズの変更などはひとまず考えずに説明します。


準備

準備というほどでもありませんが2D表示用にCanvasとその中にTextのComponentがついているオブジェクトがあれば十分です。


コード


NovelScript.cs

    [SerializeField] List<string> messageList = new List<string>();//会話文リスト

[SerializeField] Text text;
[SerializeField] float novelSpeed;//一文字一文字の表示する速さ
int novelListIndex = 0; //現在表示中の会話文の配列

void Start () {
StartCoroutine(Novel());
}

private IEnumerator Novel()
{
int messageCount = 0; //現在表示中の文字数
text.text = ""; //テキストのリセット
while (messageList[novelListIndex].Length > messageCount)//文字をすべて表示していない場合ループ
{
text.text += messageList[novelListIndex][messageCount];//一文字追加
messageCount++;//現在の文字数
yield return new WaitForSeconds(novelSpeed);//任意の時間待つ
}

novelListIndex++; //次の会話文配列
if (novelListIndex < messageList.Count)//全ての会話を表示したか
{
StartCoroutine(Novel());
}
}


これだけです。

コルーチン内部で文字を表示し全ての文字を表示し終わったら次の会話に行くというとてもシンプルなものです。

これを任意のオブジェクトに追加します。

今回は下記のような設定をしました。

3つの会話文、実際に表示するText、一文字一文字表示するスピード

これらを入力して実際に動かすとノベルゲームのように文字を表示できると思います。


注意

今回は本当に簡単に文字を表示するものを作りました。

今回の問題点としては

・任意のタイミングで次の会話に移れない。

・一時停止ができない。

・会話のキャンセル(一括表示)ができない。

など多くの問題があります。

もし時間があれば次回、上記の問題の解決策を書いていこうかなと思います。

以上となります

見てくださったかた、ありがとうございました。