Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@lindminue

Coroutineの使い方

More than 1 year has passed since last update.

今回ゲーム開発において、ある条件(Trigger)でイベントを発生するとき、時間の制限を置きたい場合Coroutineを使うと便利だというのを分かったので記述しておく。

コルーチン(Coroutine)とは?

簡単にいうと、あるイベントを処理するとき、必要によって時間の間隙を置いてイベントを処理できるようにする関数形式。

Unityレファレンス
関数を呼び出すと戻り値を返す前に実行完了されます。

例として、最近作っているゲームのソースコードを持ってきた。

prisming
public class ButtonEvent : MonoBehaviour {

    public GameObject prism;
    GameObject player;

    void Awake ( ) {
        player = GameObject.FindGameObjectWithTag("Player");
    }

    void Start ( )
    {
        prism.gameObject.SetActive(false);
    }

    void OnTriggerEnter ( Collider other ) {
       if ( other.gameObject == player ) {
           prism.gameObject.SetActive ( true );
        }

    }
    void OnTriggerExit ( Collider other ) {
        if ( other.gameObject == player ) {
            prism.gameObject.SetActive ( false );   
        }

    }

}

このコードはprismという物体をTriggerのボタンに触れたら見えたり、見えなかったりするプログラムである。
作りたかったプログラムは、見えてから5秒たったら見えなくなる動作をするプログラムだったので、ここでコルーチンを使ってみる。

以下がコルーチンを使った実装である。

prismingcoroutine

public class ButtonEvent : MonoBehaviour {

    public GameObject prism;
    GameObject player;

    void Awake ( ) {
        player = GameObject.FindGameObjectWithTag("Player");
    }

    void Start ( )
    {
        prism.gameObject.SetActive( false );
    }

    void OnTriggerEnter ( Collider other ) {
       if ( other.gameObject == player ) {
            StartCoroutine( "DisappearPrism" );
        }

    }

    IEnumerator DisappearPrism ( ) {
        prism.gameObject.SetActive( true );
        yield return new WaitForSeconds( 5.0f );
        prism.gameObject.SetActive ( false );
    }
}

こんな簡単な方法で、時間をおいて見えなくすることができる。

便利な機能であるが、毎フレーム処理しないといけない作業はUpdateを利用するのがコルーチンより良い。
コルーチンは一定時間待ってという命令をして、待ってからイベントを起こす形式だが、アップデートは毎フレームイベントを起こすためにある関数なので適度な使い分けをした方がいいと思った。

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?