private void Update() { // ゲームステージ中のみ敵の動きを実行 // Update内でステージ状況監視する以外思いつかなかった... if (stageDirector.stageState != StageDirector.STAGESTATE.INSTAGE) { StopCoroutine(switchCoroutine); } // 敵に見つかったらゲームオーバー if (hit && hit.collider.CompareTag("Player") && stageDirector.stageState == StageDirector.STAGESTATE.INSTAGE) { stageDirector.stageState = StageDirector.STAGESTATE.NONE; //TODO ほんとはこの状態切り替わった時にStageDirectorとかでBGMを切り替えたい bgmDirector.StopBGM(); StartCoroutine(Teleportation()); } // 敵にぶつかってもゲームオーバー if (player && stageDirector.stageState == StageDirector.STAGESTATE.INSTAGE && (player.transform.position - transform.position).magnitude < playerController.playerRadius * 1.5f) { stageDirector.stageState = StageDirector.STAGESTATE.NONE; bgmDirector.StopBGM(); StartCoroutine(Attack()); } }
IEnumerator PushSwitch(GameObject goalSwitch) { bgmDirector.StopBGM(); stageDirector.stageState = StageDirector.STAGESTATE.NONE; Vector3 targetPos = new Vector3(goalSwitch.transform.position.x, goalSwitch.transform.position.y + 1.5f, goalSwitch.transform.position.z); float targetPosX; float targetPosY; yield return(new WaitForSeconds(0.5f)); while ((targetPos - transform.position).magnitude > 0.05f) { targetPosX = Mathf.SmoothStep(transform.position.x, targetPos.x, goalSpeed); targetPosY = Mathf.SmoothStep(transform.position.y, targetPos.y, goalSpeed); // スイッチを押すため若干上に出る transform.position = new Vector3(targetPosX, targetPosY, transform.position.z); yield return(new WaitForSeconds(0.01f)); } // スイッチを押す transform.Translate(0, -0.5f, 0); goalSwitch.GetComponent <Animator>().SetTrigger("Push"); seDirector.PlaySE(SEDirector.SE.SWITCH); yield return(new WaitForSeconds(0.8f)); // 戻る transform.Translate(0, 0.5f, 0); yield return(new WaitForSeconds(1f)); stageDirector.DestroyStage(goalSwitch.transform.parent.gameObject); yield break; }