コルーチン
概要
Unityにはコルーチンと呼ばれる仕組みが実装されています。
このコルーチンは1つの関数を途中で終了させ、
次のフレーム、または一定時間後に終了箇所から開始できます。
敵の作成やフェードなど一定間隔で行いたい処理に対して効果を発揮します。
	
例:
	コルーチン関数()
	{
		処理1
		一定時間待機
		処理2
		一定時間待機
		処理3
	}
上記の例のコードの流れはまずコルーチン関数が実行され、
関数の先頭から処理が始まります。
処理1を実行した後に一定期間待機の命令を実行することで、
コルーチン関数の処理が一時停止し、一定時間経過後は処理2から始まり、
処理終了後は再度一定時間待機し、その後処理3を実行します。
コルーチンの例
①.Hierarchyで「Cube」を作成する
②.C#スクリプトを作成し、名前を「Cube」とする
③.以下の内容をスクリプトのクラス内に記述する
	// Use this for initialization
	void Start () {
		// コルーチン開始
		StartCoroutine ("ChangeScale");
	}
			
	// Update is called once per frame
	void Update () {
		
	}
	// スケール変更
	IEnumerator ChangeScale()
	{
		Vector3 scale = gameObject.transform.localScale;
		while (scale.x <= 5.0f) 
		{
			scale.x += 0.1f;
			scale.y += 0.1f;
			scale.z += 0.1f;
			gameObject.transform.localScale = scale;
			// 毎フレーム呼び出し
			yield return null;
		}
	}
④.①で作成したCubeに②で作成したスクリプトを関連付ける
⑤.実行
コルーチン関数
コルーチン関数は「IEnumerator(アイ・エニュメレイター)」を戻り値の型とした関数です。
書式
書式例
	IEnumerator 関数名(引数)
具体例
	IEnumerator ChangeScale()
戻り値の型さえIEnumeratorであれば引数の数はいくつでも使用することができたりと
自由度の高い関数が作成可能です。
処理停止のさせ方
yield(イールド)
コルーチン関数で処理の一時停止を行うには「yield(イールド)」と呼ばれる
キーワードをreturn文で使用します。
例:
	IEnumerator ChangeScale()
	{
		yield return null;
	}
WaitForSecondsクラス
returnで返す値の内容で待機時間が変わります。
nullだった場合の待機時間は1フレームです。
1フレーム以上待機させたい場合は「WaitForSecondsクラス」を使用します。
例:
	IEnumerator ChangeScale()
	{
		// 1秒待機
		yield return new WaitForSeconds(1.0f);
	}
コルーチン関数の注意点
コルーチン関数は最低1つは「yield return」を設定する必要があります。
1つも設定がない場合エラーになるので注意して下さい。
例:
	IEnumerator ChangeScale()
	{
		// yield return がないからエラー
	}
コルーチン開始
コルーチンを開始するには「StartCoroutine」関数を使用します。
関数仕様
・関数名
	StartCoroutine
		
・戻り値
	成功:作成されたCoroutineクラス
	失敗:エラー(処理停止)
			
・引数その1
	string:
		コルーチン関数名
	例:
		StartCoroutine("ChangeScale");
・引数その2
	string:
		コルーチン関数名
			
	object:
		コルーチン関数の引数
	例:
		StartCoroutine("ChangeScale", 1.0f);
・引数その3
	IEnumerator:
		IEnumerator(コルーチン関数の戻り値を使用)
	例1:
		IEnumerator func = ChangeScale(1.0f, 5.0f);
		StartCoroutine(func);
					
	例2:
		StartCoroutine(ChangeScale(1.0f, 5.0f));
	※コルーチン関数はStartCoroutineで起動するまでは実行されないので、
	 「IEnumerator func = ChangeScale(1.0f, 5.0f)」では処理は動作せず、
	 戻り値のIEnumeratorは返ってきます。
・内容
	引数で指定したコルーチンを起動します。
	指定したコルーチンがなかった場合はnullなどの情報が返るのではなく
	動作停止になるので注意が必要です。
コルーチンの終了
コルーチン終了は処理が関数の最後まで進むと終了するか
外部から「StopCoroutine関数」を呼ぶことで終了します。
関数仕様
・関数名
	StopCoroutine関数
		
・戻り値
	なし
		
・引数その1
	string:
		コルーチン関数名
	例:
		StopCoroutine("ChangeScale");
・引数その2
	Coroutine:
		停止させたいコルーチンクラスオブジェクト
	例:
		Coroutine coroutine = StartCoroutine("ChangeScale");
		StopCoroutine(coroutine);
		
・引数その3
	IEnumerator:
		停止させたいコルーチン関数のIEnumerator
	例:
		IEnumerator func = ChangeScale();
		StartCoroutine(func);
		StopCoroutine(func);
・内容
	コルーチンに関する情報を指定し、そのコルーチンを停止させる
	IEnumeratorの場合は停止後にStartCoroutineを使用し、
	停止用に指定した際と同じIEnumeratorを使用すれば
	一時停止扱いとなり、途中から処理が再開します。