예제 #1
0
    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());
        }
    }
예제 #2
0
    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;
    }