実現したいこと
- DOTweenを利用し、
まず、UI上のtext_1のテキストをノベル風のアニメーションを付けたうえで、
一定時間経過後に削除し、次のtext_2のTextMeshProUGUIを表示させたい
- 次は同様に、次のtext_2の表示が一定時間経過後に全て終わったら、
次のtext_3のテキストを表示させ、text_2は破棄、または非表示にしたい
- これを繰り返すことで、
ライトノベル風に文字を表示させていきたいです。
参考サイト
ノベルゲームのような文章表示
・https://unity-yuji.xyz/dotween-pro-textmeshpro-animation/
発生している問題・エラーメッセージ
・text:空オブジェクトが非アクティブ
・text_1からtext_4までのオブジェクトを破棄もしくは、非表示できない
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using TMPro; 4using UnityEngine; 5using DG.Tweening; 6 7public class Test : MonoBehaviour 8{ 9 void Start() 10 { 11 AAA(); 12 } 13 14 private void AAA() 15 { 16 var objs = GameObject.FindGameObjectsWithTag("Title"); 17 foreach (var obj in objs) 18 { 19 TextMeshProUGUI text = obj.GetComponent<TextMeshProUGUI>(); 20 var str = text.text; 21 text.text = ""; 22 StartCoroutine(EaseLinear(text, str)); 23 } 24 } 25 26 private IEnumerable EaseLinear(TextMeshProUGUI text, string str) 27 { 28 text.DOText(str, 3.0f).SetEase(Ease.Linear); 29 yield return new WaitForSeconds(1f); 30 } 31}
試したこと
まず
テキストのオブジェクトに名前をtext_1,2,3,4と数字を割り振っていることと、
TitleというTagをTextMeshProUGUIオブジェクトに設定しています。
具体的には、以下になります。
この状態で、
GameObject配列の取得は、
C#
1var objs = GameObject.FindGameObjectsWithTag("Title") 2foreach (var ob in objs){ 3 4}
を基本に使おうと思っています。
コードの中にも記載されているかなと思います。
問題なのが、このforeach文の中で、obにはtext_1,2,3,4のGameObjectが入っています。
そこからTextMeshProUGUIコンポーネントを取得し、DOTweenを使ってAnimationをするところまでは出来るとしても、
その前後、
・text_1のみまずはsetActive(true)にし、他はfalseにすること
・次に、テキストが変わるごとに前のテキストが非表示になり、次のテキストが表示にされるという箇所ができない
です。
最後に全てのテキストが表示され終わったら、次のシーンへ遷移ことを考えています。
補足情報(FW/ツールのバージョンなど)
unity 2021.3.1f
visual studio 2022
回答1件
あなたの回答
tips
プレビュー