ウィンナスのプログラミング忘備録

アプリケーション制作をしている最中に発見したテクニックを忘備録としてまとめていきます。

【Unity2D】一時停止を実装してみる

今回は一時停止を実装してみたいと思います。

「3秒後にオブジェクトを動かしたい!」などといった場合に重宝できると思います。

 

実装には以下の方法があります。

  • Invokeを使う方法
  • コルーチンを使う方法

※他の方法もあるけどこれらが使えれば問題ないかな?笑

 

Invokeを使う方法

とりあえず、一番簡単な方法を実装してみます。

まずは、お馴染み(?)ウィンちゃんを設定していきます。

ウィンちゃんにスクリプト「DelayActivity」を設定します。

f:id:win-friendof:20160710190654j:plain

「DelayActivity.cs」を編集していきます。

「Invoke("メソッド名", 秒数)」で一時停止が出来ます。

Vector2 vec;

// Use this for initialization
void Start () {
}

// Update is called once per frame
void Update () {
	Invoke("run", 4.5f);
}

run(){
	vec = this.transform.position;
	vec.y += 1 * Time.deltaTime;
	this.transform.position = vec;
}

 このコードを記述することで4.5秒後にウィンちゃんが1づつ上へ動きます。

しかし、これではrunメソッドに引数を渡すことが出来ないので汎用性に欠けてしまいます。

簡単だけど汎用性に欠けるのがInvokeの特徴です。

 

コルーチンを使う方法

コルーチンは簡単に言えば「1フレーム中断する」という感じです。

Vector2 vec;

// Use this for initialization
void Start () {
}

// Update is called once per frame
void Update () {
    //コルーチンの呼び出し
	StartCoroutine (run(4.5f, 2.5f));
}

//ここがコルーチン(メソッド名、引数は任意で大丈夫です)
IEnumerator run(float delay, float move){
    //ここで何秒待つかを設定します
    //delay秒間中断する感じ
	yield return new WaitForSeconds (delay);

    //ここに行いたい処理を書いていきます
	vec = this.transform.position;
	vec.y += move * Time.deltaTime;
	this.transform.position = vec;
}

このコードを記述することでウィンちゃんが4.5秒後に2.5づつ上へ移動します。

また、runメソッドに「何秒待つか」「どのくらい動かすか」2つの引数を渡しています。

場合によっては引数を増やしたり減らしたりすることが出来ます。

コルーチンを使った方法は「メンドイけど汎用性が高い」といえます。