こちらのテキスト表示スクリプト
リンク内容
(超簡単なテキスト制御3)
を使用して、某RPG(sfc版ドラゴン…3風)のテキストメッセージを作りたいと考えています。
現在スクリプトをいじっていないのでスタート時にテキストが表示され、テキストが表示される状態ですが、これをキャラクターに触れてボタンを押した時に初めて実行するようにし、また、テキストが終了した場合は画面から消えるようにしたいのですが、どのように書き加えられればいいのかわかりません…
キャラクターとの接触については、トリガーを設定して、触れている間にボタンを押すとテキストが表示…というようにしようと考えています。
アセットの使用も考えたのですが、UIをなるべく寄せたいと考えていて、例が見当たりませんでした。また今回は選択肢やバックログは必要ないため、上記サイトを参考にしています。
具体的な方法を教えていただければと思います。よろしくお願いします
該当のソースコード
using UnityEngine; using System.Collections; using UnityEngine.UI; public class TextController : MonoBehaviour { public string[] scenarios; [SerializeField] Text uiText; [SerializeField][Range(0.001f, 0.3f)] float intervalForCharacterDisplay = 0.05f; private string currentText = string.Empty; private float timeUntilDisplay = 0; private float timeElapsed = 1; private int currentLine = 0; private int lastUpdateCharacter = -1; // 文字の表示が完了しているかどうか public bool IsCompleteDisplayText { get { return Time.time > timeElapsed + timeUntilDisplay; } } void Start() { SetNextLine(); } void Update () { // 文字の表示が完了してるならクリック時に次の行を表示する if( IsCompleteDisplayText ){ if(currentLine < scenarios.Length && Input.GetMouseButtonDown(0)){ SetNextLine(); } }else{ // 完了してないなら文字をすべて表示する if(Input.GetMouseButtonDown(0)){ timeUntilDisplay = 0; } } int displayCharacterCount = (int)(Mathf.Clamp01((Time.time - timeElapsed) / timeUntilDisplay) * currentText.Length); if( displayCharacterCount != lastUpdateCharacter ){ uiText.text = currentText.Substring(0, displayCharacterCount); lastUpdateCharacter = displayCharacterCount; } } void SetNextLine() { currentText = scenarios[currentLine]; timeUntilDisplay = currentText.Length * intervalForCharacterDisplay; timeElapsed = Time.time; currentLine ++; lastUpdateCharacter = -1; } }
補足情報(FW/ツールのバージョンなど)
Unity version 2018.3.0f2
回答1件
あなたの回答
tips
プレビュー