(Unity)会話システム2(複数のセリフを切り替える。一文字ずつ表示する)

(スクリプト)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TextController2 : MonoBehaviour
{
    public string[] talks;
    private string[] words;
    public Text textLabel;
    public AudioClip sound;

    public GameObject talkButton;
    private int talkNum = 0;

    // ボタンを押すと会話スタート
    public void OnTalkButtonClicked()
    {
        // 会話フィールドをリセットする。
        textLabel.text = "";

        StartCoroutine(Dialogue());

        // トークボタンを非表示にする。
        talkButton.SetActive(false);
    }

    // コルーチンを使って、1文字ごと表示する。
    IEnumerator Dialogue()
    {
        // 半角スペースで文字を分割する。
        words = talks[talkNum].Split(' ');

        foreach (var word in words)
        {
            // 0.1秒刻みで1文字ずつ表示する。
            textLabel.text = textLabel.text + word;
            AudioSource.PlayClipAtPoint(sound, Camera.main.transform.position);
            yield return new WaitForSeconds(0.1f);
        }

        // 次のセリフがある場合には、トークボタンを表示する。
        if(talkNum + 1 < talks.Length)
        {
            talkButton.SetActive(true);
        }
        
        // 次のセリフをセットする。
        talkNum = talkNum + 1;
    }
}

(設定ポイント)

  • セリフは「半角スペース」を入れて設定する。


(実行結果)

  • ボタンを押すと、複数のセリフが一行ずつ(かつ一文字ずつ)順番に表示されればOK

 

  • 最後のセリフの場面では、「ボタン」は表示されない。