テキストをぱっと出すのと、
文字送りにして出すのとでは、
そのテキストの読ませやすさ、注意の惹きつけやすさが全然違います。
テキストを1文字ずつ表示させる最も知られた方法は、
アセットDOTween (HOTween v2)を使った方法です。
DOTWeenは確かに便利で、
使えるようになっておくことは必須だと思いますが、
文字送りで表示させることは、そのようなツールを使うまでもありません。
そして、その1文字1文字に効果音をつける場合は、
DOTweenを使うより、ツールなしのほうがシンプルに実装できます。
DOTweenは、DOTween (HOTween v2)(無料版)とDOTween Pro(有料版)があり、
1文字1文字にアニメーションや効果音をつけられるのは、
DOTween Pro(有料版)です。
それでも効果音をつける手法は、Kanのメモ帳様で紹介されていますが、
やや面倒…^^;
そこで、本記事ではツールなしでの実装方法を紹介します(完成形↓)
1.テスト用にUIを配置
TextもしくはTextMeshProのいずれかを使えますので、適当に配置します。
ここでは単なるTextの場合で説明します。
また、複数の文章に対して、文字送りするので、
次の文章を呼び出すための「次へボタン」も配置します。
そして、1文字ごとに鳴らす効果音ファイルをシーン配置します。
(効果音ラボのカーソル移動4を拝借)
Play On Awakeは解除しましょう。
準備はこれでOK ^^
2.ノベル風の文字送り用スクリプト
早速、NovelTextManager.csというスクリプトを以下のコード内容で作成します。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class NovelTextManager : MonoBehaviour { public Text novelText; //表示用テキスト public GameObject nextBtn; //次ボタン public AudioSource charSE; //1文字ずつの効果音 public string[] sentences; //表示したい文章の配列 public int i; // Start is called before the first frame update void Start() { StartCoroutine(DisplaySentence()); //文字送り開始 } // Update is called once per frame void Update() { if(novelText.text == sentences[i]) //文章が完成したら、ボタンを表示 { nextBtn.SetActive(true); if(i == (sentences.Length - 1)) //さらに最後の文章ならボタン非表示 { nextBtn.SetActive(false); } } else { nextBtn.SetActive(false); } } IEnumerator DisplaySentence() { foreach(char x in sentences[i].ToCharArray()) //~.ToCharArray()はテキスト1文字ずつの配列 { novelText.text += x; //1文字追加 charSE.Play(); //効果音再生 yield return new WaitForSeconds(0.1f); //0.1秒間隔 } } public void OnClickNext() { if(i < sentences.Length - 1) //最後の文章でないなら { i++; novelText.text = ""; //現在の文章を白紙に StartCoroutine(DisplaySentence()); //次の文字送り開始 } } }
内容はスクリプトのコメントに書いた通りです。
ポイントは、ToChararray()によって、
1つの文章を、その1文字ずつを要素にもつ配列にしている点です。
その配列を、for文で1文字ずつに対して処理しています。
また、Update関数やOnClickNext関数で、
その文章が何番目の文章なのか(最後かどうか)を
i == sentences.Length または i < sentences.Length で判定して
次へボタンの扱いを変えています。
3.Inspectorでの設定
このスクリプトをシーンのオブジェクト、とりあえずはMainCameraにアタッチします。
Inspectorにて、図のように紐付け、文章を準備します。
次へボタンのOnclickも設定します。
作業は以上です!
ゲームを実行すると、ノベル風の文字送りを楽しむことができます。