質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

688閲覧

ノベルゲーム風のテキストを4つ作り、それを1から順に4まで表示させては消していく感じで、最後にシーン遷移までしたい

PotePui

総合スコア69

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2022/08/15 14:43

実現したいこと

  • 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/08/15 21:18

現状ではどういう動作となっているのか詳しく説明しよう
guest

回答1

0

ベストアンサー

StartイベントではなくUpdateイベントでtween処理を実行し、都度DOTweenのOnCompleteイベントで終了を確認しながらオブジェクトを表示非表示の制御をしてください。

投稿2022/08/15 22:47

RiaFeed

総合スコア2701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PotePui

2022/08/25 08:24

遅くなりました。 結局、時間のこともあって、一つのテキスト欄にすべてを表示させることにしました。 今回はそういう感じにしたことでうまくいきました。 次回は、Update関数内で、DOTweenのOnCompleteをチェックするようにしてみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問