もくもくあぽにっき

もくもく作業してもくもく日記を書く。たまに成果物出す(たぶん、きっと)

テストが終わったのでUnity ~非同期わからん~

テストが終わった

学校のテスト期間が終了した
そこそこ勉強して、そこそこ答えられたので、まぁ結果待ち

これで時間ができた!…かに見えた
できてなかった。むしろレポートとかの提出物が山のよう

ぶっちゃけ期末ってほんとに忙しいしもっと課題量の分散を心がけてほしい

だがしかし
まぁ今日くらいいいでしょの精神でUnityをいじる

今作ってるもの

すごろくのような、迷路のようなゲームのような何かを作っている

画面に出てる十字キーをぽちぽちおして、自キャラのサイコロをコロコロゴールまで運ぶ、ただそれだけ
今後のアップデート(予定)にはペンキで色塗り(ス●ラかな)なんかも含まれている

コルーチンの話

サイコロを転がす関数ではオブジェクトを回転させてるんだけども、目標値まで一気に回すと転がしてる感が無いってことで、徐々に回転させる動作をコルーチンに分けている

こんな関数から呼ぶ

public void MoveCube(int direction){
    if (isRotate == false) { 
        switch (direction) {
        case left:
            rotatePoint = transform.position + new Vector3 (-cubeSizeHalf, -cubeSizeHalf, 0f);
            rotateAxis = new Vector3 (0, 0, 1);
            break;
        case right:
            rotatePoint = transform.position + new Vector3 (cubeSizeHalf, -cubeSizeHalf, 0f);
            rotateAxis = new Vector3 (0, 0, -1);
            break;
        case front:
            rotatePoint = transform.position + new Vector3 (0f, -cubeSizeHalf, cubeSizeHalf);
            rotateAxis = new Vector3 (1, 0, 0);
            break;
        case back:
            rotatePoint = transform.position + new Vector3 (0f, -cubeSizeHalf, -cubeSizeHalf);
            rotateAxis = new Vector3 (-1, 0, 0);
            break;
        }
        StartCoroutine (RotateCube ());
    }
}

ゴールしたい

サイコロの移動はできたので、ゴール判定をしたい
オブジェクト指向的に、判定はゴールのオブジェクトにやってもらいたい(ゴール自身の上にサイコロが来たかを見る)
ただ、Updateで毎フレーム見るのも、そんなにリアルタイムに変化するゲームじゃないしきれいじゃない

そうだ、サイコロが移動した直後にゴール判定メゾットが動けばいいんだ

どうやんのさ

StartCoroutine (RotateCube ())の終了をゴールクラスから検出したくなったので調べてみた

  • コルーチンの終了を待つ
  • 複数のコルーチンの終了を待ち合わせる

なんて話はちらほら出るんだけど

  • コルーチンの終了を他クラスへ通知

ってどう実現すればいいのか

もうすこし調べつつ悩んでみることにする

p.s. ソースコード貼りやすくてやっぱりはてブロはいいね