BETA

台詞表示のレシピ1(台詞表示に合わせてぽぽぽ音を付けたい編)

投稿日:2019-12-21
最終更新:2019-12-22

なんかUnityでいい感じに台詞を表示させたいとき用
Fungusとか使いたいけどぽぽぽ音の出し方の調整がわからなかったという、かわいそうな私向け

用意するもの

Unity-TextTyper / redbluegames様
 (Copyright (c) 2015 Woosung Jeon Released under the MIT license)
ListExtension / kan_kikuchi様
・TextMeshPro(ふつうのTextでもたぶんできる)

※用意したものを適宜プロジェクトで使えるようにしておきます。

手順①文字を表示したりクリックに反応するスクリプトを書きます。

※bool Submit()でクリックのほかにTime.timeScale != 0を条件にしてるのは、ポーズ中のクリックに反応させないためです(自分のゲームのポーズは単純にTime.timeScale = 0にしています)。

namespace RedBlueGames.Tools.TextTyper  
{  
    using System.Collections;  
    using System.Collections.Generic;  
    using UnityEngine;  
    using TMPro;  

    public class SSTalk : MonoBehaviour  
    {  
        public List<string> dialogueLines = new List<string>();  

        public string[] serif;  

        [SerializeField]  
        private TextTyper TextTyper;  

        public TMP_Text Name;  
        public string n;  

        public void Start()  
        {  
            Name.text = n;  
            for (int i = 0; i < serif.Length; ++i)  
            {  
                dialogueLines.Add(serif[i]);  
            }  
            StartCoroutine(ShowScript());  
        }  

        IEnumerator ShowScript()  
        {  
            while (dialogueLines.Count > 0)  
            {  
                string serif = dialogueLines.GetAndRemove(0);  
                this.TextTyper.TypeText(serif);  
                yield return new WaitUntil(Submit);  
                yield return new WaitWhile(Submit);  
            }  
            yield return new WaitUntil(Talkend);  
            Destroy(gameObject);  
        }   

        public bool Talkend()  
        {  
            return (dialogueLines.Count <= 0);  
        }  

        public bool Submit()  
        {  
            return Time.timeScale != 0 &&Input.GetMouseButtonDown(0) || Time.timeScale != 0&& Input.GetKeyDown(KeyCode.Return);  
        }  
    }  
}  

手順②好きなぽぽぽ音を入れるためのスクリプトを書きます。

e RedBlueGames.Tools.TextTyper  
{  
    using UnityEngine;  

    public class TalkSounds : MonoBehaviour  
    {  
        public AudioClip printSoundEffect;  

        [SerializeField]  
        private TextTyper TextTyper;  

        private void Start()  
        {  
            TextTyper.CharacterPrinted.AddListener(HandleCharacterPrinted);  
        }  

        public void HandleCharacterPrinted(string printedCharacter)  
        {  
            if (printedCharacter == null || printedCharacter == " " || printedCharacter == "\n")  
            {  
                return;  
            }  

            var audioSource = this.GetComponent<AudioSource>();  

            audioSource.clip = printSoundEffect;  
            audioSource.Play();  
        }  
    }  
}  

手順③ふきだしのPrefabを作ります。

*気を付けること*
1.台詞を入れるTextMeshPro(もしくはText)オブジェクトに、TextTyperを付けること。
2.一番親になるオブジェクト(たぶんCanvasあたり)に①と②のスクリプトとAudioSourceを付けること。
※Inspecterの設定はこんな感じ(PrintSoundEffectは設定しなくてもいいです)

まだ続くよ

テキストファイルから台詞を読みこみたい編につづく!

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

N-Lab.がUnityに返り討たれたきずあとメモ。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう