Profile

Nango

Author:Nango

空がキレイだなぁ

Search

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-

Comment

Comment Form

Comment Form
管理者にだけ表示を許可する
95

Coroutineを扱いやすくするスクリプト (Unity v3.5)(C#)

Unity Community で見つけた TaskManager.cs について
CoroutineがTask型のインスタンスとして目に見えるので、管理がしやすくなると思う。

使い方
1) ここ のリンクからダウンロードする (説明分もある)
2) Unity の Project に入れる

3) サンプルを動かす。
ExampleUsage.cs
using UnityEngine;
using System.Collections;

public class ExampleUsage : MonoBehaviour {

void Start () {
Task spam = new Task(MyAwesomeTask());

new Task(TaskSleeper(2, spam));

new Task(TaskKiller(5, spam));
}

IEnumerator MyAwesomeTask()
{
while(true) {
Debug.Log("Logcat iz in ur consolez, spammin u wif messagez.");
yield return null;
}
}

IEnumerator TaskKiller(float delay, Task t)
{
yield return new WaitForSeconds(delay);
t.Stop();
}

IEnumerator TaskSleeper(float sec, Task t){
t.Pause ();
yield return new WaitForSeconds(sec);
t.Unpause();
}
}

これは作者の Example Usage を基本にして、ひとつのメソッドを追加したもの。
Sleep()のようなことも簡単にできる。

実行するとHierarchyに自動でTaskManagerゲームオブジェクトが作られる。
TaskManagerはシングルトンという仕組みを使って、シーン内に一つしか作成されないようになっている。


コルーチンが止まったときに実行するメソッドをタスクに渡しておくこともできる。

ExampleUsage.cs の 8行目に下記のようなコードを加えること

spam.Finished += (bool manual) => {
if(manual)
{//You used Stop()
Debug.LogWarning("Stopped.");
}
else
{//Coroutine finished the work
Debug.LogWarning ("Done.");
}
};
仕事を終えたのか、Stop() によって止めたのかを判別するために bool manual があるので、それを利用して処理を変える。
ExampleUsage の MyAwesomeTask() は無限ループになっているため Done. がプリントされることはない。
  • Date : 2012-05-14 (Mon)
  • Category : Unity
0

Comment

Comment Form

Comment Form
管理者にだけ表示を許可する
Return to Pagetop
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。