【Unity】一定時間処理を停止するにはコルーチンを活用。複数引数への対応方法も。

2022年8月28日

どうも、だらはです。
今回は、一定時間処理を停止するためにコルーチンの活用方法を記載します。

スポンサーリンク

コルーチンの活用方法

コルーチンの活用事例を見た方が理解が早いと思うのでスクリプトを記載します。
機能としては、ボタン押下でテキストを表示し、一定時間後に非表示にします。
コルーチンに与える引数の数を1つと2つ以上の場合で分けて記載します。

◆スクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class SampleCoroutine : MonoBehaviour
{
    IEnumerator coroutine;

    Text textAttention1 = null;
    Text textAttention2 = null;

    void Start()
    {
        //テキスト表示用
        textAttention1 = GameObject.Find("PlaceholderAttention1").GetComponent<Text>();
        textAttention2 = GameObject.Find("PlaceholderAttention2").GetComponent<Text>();
        //初期化用
        coroutine = Attention2("defalt", 0.5f);
    }

    //コルーチンの引数が1つの場合
    public void AttentionText1()
    {
        StopCoroutine("Attention1");
        StartCoroutine("Attention1", "Attention1");
    }
    IEnumerator Attention1(string str)
    {
        //1秒間テキストを表示して消す
        textAttention1.text = str;
        textAttention1.enabled = true;
        yield return new WaitForSeconds(2f);
        textAttention1.enabled = false;
    }

    //コルーチンの引数が2つ以上の場合
    public void AttentionText2()
    {
        StopCoroutine(coroutine);
        coroutine = Attention2("Attention2", 2f);
        StartCoroutine(coroutine);
    }
    IEnumerator Attention2(string str, float time)
    {
        //一定時間テキストを表示して消す
        textAttention2.text = str;
        textAttention2.enabled = true;
        yield return new WaitForSeconds(time);
        textAttention2.enabled = false;
    }
}

実行結果の画面キャプチャを以下に示します。

◆実行結果

無事、引数の数によらず、一定時間経過後にテキストを非表示にすることができました。

注意点

ボタン押下によりAttentionText1()が実行されてStartCoroutine()が実行されるとAttention1()が実行されますが、
StartCoroutine()の後に処理がある場合でも、Attention1()の終了を待たずに即時実行されます。
あくまで、Attention1()内での処理がコルーチンの機能により停止できるわけです。
間違い安いので要注意です。

最後に

いかがでしたでしょうか。
コルーチンに与える引数の数で、スクリプトの書き方が異なります。
忘れたら、何度でもこの記事を見に来てください:)

以上、だらはでした。

スポンサーリンク

基礎

Posted by daraha_gm