マップを移動したときにマップ名を出すようにスクリプトを書きました。
違うマップに移動したときにUIを表示し、また、別のマップに移動したら同じく起動させます。4秒で消えるようにしているのですが、UIが表示され3秒後に別のマップに移動したらマップ名が残り1秒しか表示されないのですが何かいい方法はありませんか
c#
1 2``C# 3 4 public GameObject text; 5 public Text placeText; 6 public bool Enter; 7 public string placeName; 8private void OnTriggerEnter2D(Collider2D col) 9 { 10 if(col.tag == "Player") 11 { 12 if (Enter == true) 13 { 14 StartCoroutine(PlaceNameCo()); 15 } 16 } 17 } 18 private IEnumerator PlaceNameCo() 19 { 20 text.SetActive(true); 21 placeText.text = placeName; 22 yield return new WaitForSeconds(4f); 23 text.SetActive(false); 24 } 25
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
コルーチンが起動中ならStopCoroutineで止めてからStartCoroutineしてはどうでしょう?
追記
動作させたわけではないので、下記スクリプトが正常に動作しないかもしれませんが、こんな感じでしょうか。
スクリプトがどのようなオブジェクトにアタッチされているのか分からないので、適切なのか判断できませんが、とりあえず「マップから出た」というのを「OnTriggerExit2D」で判断できるものとしています。
C#
1 2 public GameObject text; 3 public Text placeText; 4 public bool Enter; 5 public string placeName; 6 7 Coroutine co; 8 9 private void OnTriggerEnter2D(Collider2D col) 10 { 11 if(col.tag == "Player") 12 { 13 if (Enter == true) 14 { 15 co = StartCoroutine(PlaceNameCo()); 16 } 17 } 18 } 19 private void OnTriggerExit2D(Collider2D col) 20 { 21 if(col.tag == "Player") 22 { 23 if (Enter == true) //Enterが何を示すのもなのか分からなかったのでそのままにしてあります。 24 { 25 if (co != null) 26 { 27 StopCoroutine(co); 28 co = null; 29 } 30 } 31 } 32 } 33 34 private IEnumerator PlaceNameCo() 35 { 36 text.SetActive(true); 37 placeText.text = placeName; 38 yield return new WaitForSeconds(4f); 39 text.SetActive(false); 40 co = null; 41 }
また別の案ですが、コルーチンの起動に関しては今まで通りとしてコルーチンにて
C#
1 private IEnumerator PlaceNameCo() 2 { 3 text.SetActive(true); 4 placeText.text = placeName; 5 if(int i = 0;i < 40 ; i++) 6 { 7 yield return new WaitForSeconds(0.1f); 8 if (placeText.text != placeName) 9 { 10 yield break; 11 } 12 } 13 text.SetActive(false); 14 co = null; 15 }
といった感じでWaitするのを短時間でループするようにして、テキストが自分のマップ名ではなくなったらコルーチンを終了するようにすればどうでしょう?
ただ、私もUnityはほぼ知らないと言っていいので、もっと適切な書き方があるのではないかと思います。
投稿2020/02/13 03:36
編集2020/02/25 08:28総合スコア10489
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/13 04:14
2020/02/13 04:18
2020/02/13 07:21
2020/02/13 07:38
2020/02/13 16:51
2020/02/13 22:41 編集
2020/02/14 03:58
2020/02/14 04:41
2020/02/14 16:16
2020/02/14 23:10
2020/02/15 02:15
2020/02/15 23:36 編集
2020/02/16 02:57
2020/02/25 06:50
2020/02/25 07:15
2020/02/25 08:44
2020/02/26 04:11
2020/02/26 04:15 編集
2020/02/26 04:28
2020/02/27 11:00
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。