/// <summary> /// 移動 /// </summary> private void Move() { // シャッターの状態がリフトアップ状態でなければ処理しない if (!state.Equals(SHUTTER_STATE.LIFT_UP)) { return; } // 移動ベクトルを設定 Vector3 vec3MoveVector = moveDirection.normalized * speed; // 移動距離を設定 distance = transform.position - startPoint; // 移動距離の大きさが移動量よりも大きくなった場合 if (distance.magnitude > movement) { // 移動ベクトルを設定 vec3MoveVector = -vec3MoveVector.normalized * (distance.magnitude - movement); // 移動方向を初期化 moveDirection = Vector3.zero; // シャッターの状態を滞在状態にする state = SHUTTER_STATE.STAY; } // 移動 transform.position += vec3MoveVector; }
private uint currentNumber; // 現在の番号 // Use this for initialization void Start() { moveDirection = Vector3.zero; startPoint = transform.position; distance = Vector3.zero; state = SHUTTER_STATE.STANDBY; currentNumber = 0; // 音符ブロック配列の要素を昇順にソート IComparer comparer = new NoteBlockNumberComparer(); Array.Sort(noteBlocks, comparer); // 音符ブロックの初期化 InitializeNoteBlocks(); }
/// <summary> /// 待機 /// </summary> private void Standby() { // シャッターの状態が待機状態でなければ処理しない if (!state.Equals(SHUTTER_STATE.STANDBY)) { return; } // nullチェック if (MyUtility.NullCheck(noteBlocks)) { return; } // 音符ブロックの数だけループ for (int i = 0; i < noteBlocks.Length; i++) { // 音符ブロックが検知した場合 if (noteBlocks[i].IsDetectNow()) { // 音符ブロックの番号が現在の番号と一致した場合 if (noteBlocks[i].GetMyNumber() == currentNumber) { // 音符ブロックのサウンド再生の設定を無効にする noteBlocks[i].Deactivate(); // 次の音符ブロックのサウンド再生の設定を有効にする if (i < noteBlocks.Length - 1) { noteBlocks[i + 1].Activate(); } // 現在の番号を更新 currentNumber++; } // 音符ブロックの番号が現在の番号と一致しなかった場合 else { // 現在の番号を初期化 currentNumber = 0; // 音符ブロックの初期化 InitializeNoteBlocks(); } } } // 現在の番号が音符ブロックの個数以上になったらリフトアップする if (currentNumber >= noteBlocks.Length) { // 移動方向を上向きにする moveDirection = Vector3.up; // シャッターの状態をリフトアップ状態にする state = SHUTTER_STATE.LIFT_UP; // 現在の番号を初期化 currentNumber = 0; } }