示例#1
0
    //プレイヤーの入力を可能にしたり、不可能にしたりする
    //
    void CanInputPlayer(bool aCan)
    {
        float lTime = 0.0f;

        if (aCan == false)
        {
            lTime = 1.0f * 60.0f * 60.0f * 24.0f;
        }
        VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 0.0f, lTime);
        VirtualController.SetAxis(VirtualController.CtrlCode.Jump, 0.0f, lTime);
        VirtualController.SetAxis(VirtualController.CtrlCode.Lift, 0.0f, lTime);
        VirtualController.SetAxis(VirtualController.CtrlCode.Vertical, 0.0f, lTime);
    }
示例#2
0
    IEnumerator GameMain()
    {
        float lTakeTime;

        //ステージ開始時の演出

        //タイトルから来ていないなら、プレイヤーに寄った位置からズームアウトを開始する
        if (cameraMove.fromTitle == false)
        {
            mCameraMove.mStartPosition = GetPlayerZoomCameraPosition();
        }
        //タイトルからなら
        else
        {
            //mCameraMove.mStartPosition = new Vector3(0.0f, 0.0f, 45.0f);
        }

        //カメラをズームされた位置に移動
        mCameraMove.MoveStartPosition();


        //プレイヤーを操作不可に
        CanMovePlayer(false);
        CanJumpPlayer(false);
        OnCanShiftOperation(false);

        if (mPause != null)
        {
            mPause.canPause = false;
        }

        //BGMを再生する
        int lAreaNumber = Area.GetAreaNumber();

        if (lAreaNumber == -1)
        {
        }
        else
        {
            GameObject lBGMPrefab = null;

            if (lAreaNumber <= 3)
            {
                lBGMPrefab = mAreaBGM[lAreaNumber];
            }
            else if (lAreaNumber == 4)
            {
                int lStageNumber = Area.GetStageNumber();
                if (lStageNumber == 1)
                {
                    lBGMPrefab = mAreaBGM[1];
                }
                else if (lStageNumber == 2)
                {
                    lBGMPrefab = mAreaBGM[2];
                }
                else if (lStageNumber == 3)
                {
                    lBGMPrefab = mAreaBGM[3];
                }
                else
                {
                    lBGMPrefab = mAreaBGM[3];
                }
            }

            //BGMを流し始める
            mBGMInstance = SoundManager.SPlay(lBGMPrefab);
            SoundManager.SFade(mBGMInstance, 0.0f, SoundManager.SVolume(lBGMPrefab), 2.0f);
        }

        // タイトルシーンからの遷移なら
        if (cameraMove.fromTitle)
        {
            cameraMove.fromTitle = false;
            Debug.Log("fromTitle" + cameraMove.fromTitle);
            yield return(null);
        }
        else
        {
            // ステージ開始時のドア開き
            if (mTransition != null)
            {
                //ステージ開始時の演出
                mTransition.OpenDoorParent();

                //演出が終了するまで待機
                while (true)
                {
                    if (mTransition.GetOpenEnd())
                    {
                        break;
                    }
                    yield return(null);
                }
            }
        }


        //ゲームメインの開始
        //

        //プレイヤーが操作可能になる
        CanMovePlayer(true);
        CanJumpPlayer(true);

        // エンディングならポーズ不可
        if (mPause != null && SceneManager.GetActiveScene().name != "Ending")
        {
            mPause.canPause = true;
        }
        else
        {
        }

        //カメラのズームアウトを始める
        mCameraMove.MoveStart();


        //ゲームメインのループ
        while (true)
        {
            //カメラのズームアウトが終わってから、移す操作を出来るようになる
            if (mCameraMove.IsMoveEnd)
            {
                OnCanShiftOperation(true);
                mCameraMove.IsMoveEnd = false;
            }

            if (mPause != null)
            {
                //ポーズ中なら
                if (mPause.pauseFlg)
                {
                    //mMassShift.CanShift = false;
                    Cursor.visible = true;
                }
                else
                {
                    //mMassShift.CanShift = true;
                    Cursor.visible = false;
                }
            }

            //ゴール判定
            //
            if (CanGoal(mGoal) || _Debug_ClearFlag)
            {
                break;
            }

            yield return(null);                 //ゲームメインを続ける
        }

        //重さを移せないようにする
        OnCanShiftOperation(false);
        if (mPause != null)
        {
            mPause.canPause = false;
        }

        //プレイヤーを操作不可にする
        CanInputPlayer(false);
        CanJumpPlayer(false);

        //プレイヤーの回転が終わるまで待つ
        while (true)
        {
            if (mPlayer.IsRotation == false)
            {
                break;
            }
            yield return(null);
        }


        //カメラのズームイン
        //

        //ズーム終了後のカメラ位置を変更
        mCameraMove.mEndPosition = GetGoalZoomCameraPosition();

        //カメラの開始地点を現在のカメラ位置にする
        mCameraMove.mStartPosition = mCameraMove.transform.position;

        mCameraMove.MoveStart();

        //カメラのズームイン終了まで待つ
        while (true)
        {
            if (mCameraMove.IsMoveEnd)
            {
                break;
            }
            yield return(null);
        }


        //プレイヤーをゴールの中心まで歩かせる
        //
        mPlayer.GetComponent <MoveManager>().mask = LayerMask.GetMask(new string[] { "Stage", "Player", "Fence" });

        Vector3 lGoalCenter = mGoal.transform.position;

        //左側にいるなら
        if (mPlayer.transform.position.x <= lGoalCenter.x)
        {
            //右に歩かせる
            VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 0.5f, 30.0f);

            //ゴールの中心を超えたら、歩かせるのをやめる
            while (true)
            {
                if (mPlayer.transform.position.x >= lGoalCenter.x)
                {
                    Vector3 lPos = mPlayer.transform.position;
                    lPos.x = lGoalCenter.x;
                    mPlayer.transform.position = lPos;                      //補正
                    break;
                }
                yield return(null);
            }
        }
        //左側にいるなら
        else if (mPlayer.transform.position.x > lGoalCenter.x)
        {
            //左に歩かせる
            VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, -0.5f, 30.0f);

            //ゴールの中心を超えたら、歩かせるのをやめる
            while (true)
            {
                if (mPlayer.transform.position.x <= lGoalCenter.x)
                {
                    Vector3 lPos = mPlayer.transform.position;
                    lPos.x = lGoalCenter.x;
                    mPlayer.transform.position = lPos;                      //補正
                    break;
                }
                yield return(null);
            }
        }

        //左右移動の入力を消す
        mPlayer.GetComponent <MoveManager>().StopMoveHorizontalAll();
        VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 0.0f, 30.0f);


        //プレイヤーの回転が終わるまで待つ
        //
        while (true)
        {
            if (mPlayer.IsRotation == false)
            {
                break;
            }
            yield return(null);
        }


        //プレイヤーを移動不可にする
        CanMovePlayer(false);
        CanJumpPlayer(false);

        OnPlayerEffect(true);           //プレイヤーの更新を切る
        mPlayer.GetComponent <PlayerAnimation>().ChangeState(PlayerAnimation.CState.cStandBy);



        //
        //プレイヤーがドアに入っていく演出
        //

        yield return(new WaitForSeconds(mGoalBeforeRotateTime));

        mGoal.mOpenForce = true;                                  //ドアを強制的に開く

        mGoalBlack.transform.position = mGoal.transform.position; //黒い背景をゴールのところに移動させる
        mGoalBlack.transform.rotation = mGoal.transform.rotation;

        //歩きアニメーションの再生
        mPlayer.GetComponent <PlayerAnimation>().SetSpeed(0.3f);
        mPlayer.GetComponent <PlayerAnimation>().ChangeState(PlayerAnimation.CState.cWalk);


        //プレイヤーを回転させていく
        //
        bool lIsRight = mPlayer.RotVec.x > 0.0f;

        //右を向いているなら
        if (lIsRight)
        {
            float lAngle = 0.0f;
            while (true)
            {
                //プレイヤーのモデルの回転を、ゆっくり元に戻す
                mPlayer.CameraLookRatio = Mathf.Clamp01(mPlayer.CameraLookRatio - 1.0f / mGoalRotateTime * Time.deltaTime);
                mPlayer.LookCamera();

                //プレイヤーを回転させる
                lAngle -= 90.0f / mGoalRotateTime * Time.deltaTime;
                mPlayer.transform.rotation = Quaternion.Euler(0.0f, lAngle, 0.0f);
                if (lAngle <= -90.0f)
                {
                    mPlayer.transform.rotation = Quaternion.Euler(0.0f, -90.0f, 0.0f);
                    break;
                }

                yield return(null);
            }
        }
        else
        {
            float lAngle = 0.0f;
            while (true)
            {
                //プレイヤーのモデルの回転を、ゆっくり元に戻す
                mPlayer.CameraLookRatio = Mathf.Clamp01(mPlayer.CameraLookRatio - 1.0f / mGoalRotateTime * Time.deltaTime);
                mPlayer.LookCamera();

                //プレイヤーを回転させる
                lAngle += 90.0f / mGoalRotateTime * Time.deltaTime;
                mPlayer.transform.rotation = Quaternion.Euler(0.0f, lAngle, 0.0f);
                if (lAngle >= 90.0f)
                {
                    mPlayer.transform.rotation = Quaternion.Euler(0.0f, 90.0f, 0.0f);
                    break;
                }

                yield return(null);
            }
        }

        yield return(new WaitForSeconds(mGoalBeforeWalkingTime));

        //プレイヤーを歩かせる
        //

        mPlayer.GetComponent <PlayerAnimation>().SetSpeed(1.0f);

        mGoalBlack.StartFade(0.0f, 1.0f, 0.0f, mGoalWalkingTime);

        while (true)
        {
            mPlayer.transform.position += new Vector3(0.0f, 0.0f, 3.0f / mGoalWalkingTime * Time.deltaTime);
            if (mPlayer.transform.position.z >= 3.0f)
            {
                break;
            }

            yield return(null);
        }

        yield return(new WaitForSeconds(mGoalAfterWalkingTime));

        //歩くのをやめる
        mPlayer.GetComponent <PlayerAnimation>().ChangeState(PlayerAnimation.CState.cStandBy);


        //BGMを止める
        SoundManager.SFade(mBGMInstance, SoundManager.SVolume(mBGMInstance), 0.0f, 0.5f, true);


        //移した回数を保存
        //

        //チュートリアル以外のステージなら
        if (Area.IsInStage() && Area.GetAreaNumber() != 0)
        {
            int lAreaNum  = Area.GetAreaNumber();
            int lStageNum = Area.GetStageNumber();

            int lBeforeTimes = ScoreManager.Instance.ShiftTimes(lAreaNum, lStageNum);
            int lNowTimes    = ScoreManager.Instance.ShiftTimes();

            //今までと今回で、移した回数の最小値を保存する
            bool lIsShortest = false;
            int  lNewTimes   = lBeforeTimes;
            if (lBeforeTimes == ScoreManager.cInvalidScoreTimes)
            {
                lNewTimes = lNowTimes;
            }
            if (lNowTimes < lBeforeTimes)
            {
                lNewTimes   = lNowTimes;
                lIsShortest = true;
            }

            ScoreManager.Instance.ShiftTimes(lAreaNum, lStageNum, lNewTimes);
            ScoreManager.Instance.IsShortestTimes = lIsShortest;
        }

        //データを保存
        SaveData.Instance.Save();


        Cursor.visible  = true;
        mResult.canGoal = true;
    }
    //タイトルとチュートリアルから来た時の、自動で歩く演出のあるもの
    //
    IEnumerator StageSelectMain_FromTitle()
    {
        //重さを移せないようにする
        OnCanShiftOperation(false);
        mPause.canPause = false;

        //プレートの色を変える
        SetEnterColor(-1);

        //プレイヤーとボックスの重さを調整
        mPlayer.GetComponent <WeightManager>().WeightLv                = WeightManager.Weight.light;
        mTopStaticWeightBox.GetComponent <WeightManager>().WeightLv    = WeightManager.Weight.flying;
        mBottomStaticWeightBox.GetComponent <WeightManager>().WeightLv = WeightManager.Weight.heavy;


        //エリアの開放状況によって、重さボックスを消す
        HideBoxByAreaOpen();


        //カメラの開始地点を決める
        mCameraMove.mStartPosition = new Vector3(-19.5f, -3.5f, 45.0f);         //ステージセレクトの左端から始まる


        //カメラをズームされた位置に移動
        mCameraMove.MoveStartPosition();


        //プレイヤーを移動不可にする
        CanMovePlayer(false);
        CanJumpPlayer(false);

        // タイトルシーンからの遷移でなければ
        if (!mFromTitle)
        {
            //ステージ開始時の演出
            mTransition.OpenDoorParent();

            //演出が終了するまで待機
            while (true)
            {
                if (mTransition.GetOpenEnd())
                {
                    break;
                }
                yield return(null);
            }
        }

        //BGMを流し始める
        var t = SoundManager.SPlay(mStageSelectBGMPrefab);

        SoundManager.SFade(t, 0.0f, SoundManager.SVolume(mStageSelectBGMPrefab), 2.0f);


        //カメラのズームアウトを始める
        mCameraMove.MoveStart();


        //カメラのズームアウトが終わるまで待機
        while (true)
        {
            if (mCameraMove.IsMoveEnd)
            {
                break;
            }
            yield return(null);
        }

        mStageSelectScroll.mIsScroll = false;            //スクロールが行えるようになる

        //プレイヤーを自動で歩かせる
        //
        CanMovePlayer(true);            //プレイヤーは動けるようにするが、ユーザーの入力は受け付けない
        var v = mPlayer.GetComponent <VirtualController>();

        float cWalkTime = 10.0f;         //プレイヤーを自動で歩かせる秒数

        VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 1.0f, cWalkTime);
        VirtualController.SetAxis(VirtualController.CtrlCode.Jump, 0.0f, cWalkTime);
        VirtualController.SetAxis(VirtualController.CtrlCode.Lift, 0.0f, cWalkTime);
        VirtualController.SetAxis(VirtualController.CtrlCode.Vertical, 0.0f, cWalkTime);


        float lBeforeCameraMoveTime = mCameraMove.mTakeTime;

        mCameraMove.mStartPosition = mCameraMove.transform.position;
        mCameraMove.mEndPosition   = mStageSelectScroll.mAreaCameraPosition[0].transform.position;

        const float cCameraMoveTime = 1.0f;

        mCameraMove.mTakeTime = cCameraMoveTime;

        mCameraMove.MoveStart();

        //歩かせている間待機
        while (true)
        {
            if (mCameraMove.IsMoveEnd == true && mPlayer.transform.position.x >= mPlayerStopPosition.transform.position.x)
            {
                break;
            }
            yield return(null);
        }
        VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 0.0f, 0.0f);
        VirtualController.SetAxis(VirtualController.CtrlCode.Jump, 0.0f, 0.0f);
        VirtualController.SetAxis(VirtualController.CtrlCode.Lift, 0.0f, 0.0f);
        VirtualController.SetAxis(VirtualController.CtrlCode.Vertical, 0.0f, 0.0f);


        //カメラの移動にかける時間を戻す
        mCameraMove.mTakeTime = lBeforeCameraMoveTime;


        //プレイヤーを移動不可にする
        CanMovePlayer(false);
        CanJumpPlayer(false);


        //
        //エリア開放イベント
        //

        //エリア2が開放されているが、エリア2の開放イベントが行われていない場合
        if (Area.CanGoArea(2) && SaveData.Instance.mEventDoneFlag.mArea2Open == false)
        {
            yield return(AreaOpenEvent(2));

            SaveData.Instance.mEventDoneFlag.mArea2Open = true; //イベントを行った
            SaveData.Instance.Save();                           //ファイルにセーブ
        }

        //エリア3が開放されているが、エリア3の開放イベントが行われていない場合
        if (Area.CanGoArea(3) && SaveData.Instance.mEventDoneFlag.mArea3Open == false)
        {
            yield return(AreaOpenEvent(3));

            SaveData.Instance.mEventDoneFlag.mArea3Open = true; //イベントを行った
            SaveData.Instance.Save();                           //ファイルにセーブ
        }

        //エリア4が開放されているが、エリア4の開放イベントが行われていない場合
        if (Area.CanGoArea(4) && SaveData.Instance.mEventDoneFlag.mArea4Open == false)
        {
            yield return(AreaOpenEvent(4));

            SaveData.Instance.mEventDoneFlag.mArea4Open = true; //イベントを行った
            SaveData.Instance.Save();                           //ファイルにセーブ
        }


        //メインのコルーチンの開始
        //
        StartCoroutine(StageSelectMain());
    }
    //ステージセレクトのメインの更新
    //
    IEnumerator StageSelectMain()
    {
        OnCanShiftOperation(true);                  //重さを移せるようになる
        mStageSelectScroll.mIsScroll        = true; //スクロールが行えるようになる
        mStageSelectScroll.mCameraMoveSpeed = 50.0f;
        mPause.canPause = true;                     //ポーズが出来るようになる
        CanMovePlayer(true);
        CanJumpPlayer(true);


        int lSelectStageNum       = -1;
        int lBeforeSelectStageNum = -1;
        int lDecideSelectStageNum = -1;


        //メインのループ
        //
        while (true)
        {
            //ポーズ中ならカーソルを出す
            if (mPause.pauseFlg)
            {
                Cursor.visible = true;
            }
            else
            {
                Cursor.visible = false;
            }


            //現在いる場所のドアを開くのと、プレートを光らせるのの更新
            lSelectStageNum = mSelectStageNum;
            if (lSelectStageNum != lBeforeSelectStageNum)
            {
                if (CanEnterStage(lSelectStageNum))
                {
                    SetEnterColor(lSelectStageNum);
                    OpenDoor(lSelectStageNum, true);

                    mSelectInit = false;
                    mSelectTime = 0.0f;
                }
                else
                {
                    SetEnterColor(-1);
                }

                OpenDoor(lBeforeSelectStageNum, false);

                if (lBeforeSelectStageNum != -1)
                {
                    mEnterUI.StopAnimation();
                }
            }
            lBeforeSelectStageNum = lSelectStageNum;


            //入る為のキー操作のUI表示
            //
            mSelectTime += Time.deltaTime;
            if (mSelectTime >= 0.4f && !mSelectInit)
            {
                mSelectInit = true;

                if (lSelectStageNum != -1)
                {
                    Vector3 lUIPosition = mGoal[lSelectStageNum].transform.position;
                    lUIPosition += mGoal[lSelectStageNum].transform.rotation * Vector3.down * 2.0f;
                    mEnterUI.SetPosition(lUIPosition);
                    mEnterUI.SetRotation(mGoal[lSelectStageNum].transform.rotation);
                    mEnterUI.StartAnimation();
                }
            }


            bool lIsEnter = Input.GetKey(KeyCode.W);

            //ゴール判定
            //
            if (mSelectStageNum != -1)
            {
                //もし入る操作が行われているなら
                if (lIsEnter && CanGoal(mGoal[mSelectStageNum]) && CanEnterStage(mSelectStageNum) && Area.IsValidArea((mSelectStageNum / 5) + 1))
                {
                    lDecideSelectStageNum = mSelectStageNum;
                    break;
                }
            }

            bool lEnterDoor = false;

            //Exと行き来するドアを通ったかの判定
            if (mSelectArea1ToEx)
            {
                if (lIsEnter)
                {
                    yield return(MoveArea1ToEx());

                    lEnterDoor = true;
                }
            }

            lIsEnter = Input.GetKey(KeyCode.W);

            if (mSelectExToArea1)
            {
                if (lIsEnter)
                {
                    yield return(MoveExToArea1());

                    lEnterDoor = true;
                }
            }

            yield return(null);             //ゲームメインを続ける


            //Exエリアと行き来するドアを、開きっぱなしにしないようにする
            if (lEnterDoor == true)
            {
                mExToArea1Door.mOpenForce = false;
                mArea1ToExDoor.mOpenForce = false;
            }
        }


        //重さを移せないようにする
        OnCanShiftOperation(false);
        mPause.canPause = false;

        //プレイヤーが入力できないようにする
        CanInputPlayer(false);

        CanJumpPlayer(false);

        //プレイヤーの回転が終わるまで待つ
        while (true)
        {
            if (mPlayer.IsRotation == false)
            {
                break;
            }
            yield return(null);
        }


        //UIを消す
        mEnterUI.gameObject.SetActive(false);

        //ズーム終了後のカメラ位置を変更
        mCameraMove.mEndPosition = GetPlayerZoomCameraPosition(mGoal[lDecideSelectStageNum].transform.up.y <= 0.0f);


        //カメラの開始地点を現在のカメラ位置にする
        mCameraMove.mStartPosition = mCameraMove.transform.position;


        //プレイヤーをゴールの中心まで歩かせる
        Vector3 lGoalCenter = mGoal[lDecideSelectStageNum].transform.position;

        //左側にいるなら
        if (mPlayer.transform.position.x <= lGoalCenter.x)
        {
            //右に歩かせる
            VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 1.0f, 30.0f);

            //ゴールの中心を超えたら、歩かせるのをやめる
            while (true)
            {
                if (mPlayer.transform.position.x >= lGoalCenter.x)
                {
                    Vector3 lPos = mPlayer.transform.position;
                    lPos.x = lGoalCenter.x;
                    mPlayer.transform.position = lPos;                      //補正
                    break;
                }
                yield return(null);
            }
        }
        //左側にいるなら
        else if (mPlayer.transform.position.x >= lGoalCenter.x)
        {
            //左に歩かせる
            VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, -1.0f, 30.0f);

            //ゴールの中心を超えたら、歩かせるのをやめる
            while (true)
            {
                if (mPlayer.transform.position.x <= lGoalCenter.x)
                {
                    Vector3 lPos = mPlayer.transform.position;
                    lPos.x = lGoalCenter.x;
                    mPlayer.transform.position = lPos;                      //補正
                    break;
                }
                yield return(null);
            }
        }

        mPlayer.GetComponent <MoveManager>().StopMoveHorizontalAll();
        VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 0.0f, 30.0f);

        //プレイヤーの回転が終わるまで待つ
        while (true)
        {
            if (mPlayer.IsRotation == false)
            {
                break;
            }
            yield return(null);
        }


        //プレイヤーを移動不可にする
        CanMovePlayer(false);
        CanJumpPlayer(false);

        OnPlayerEffect(true);           //プレイヤーの更新を切る

        mPlayer.GetComponent <PlayerAnimation>().ChangeState(PlayerAnimation.CState.cStandBy);


        mStageSelectScroll.mIsScroll = false;


        //ステージセレクトでは、ズームインしない仕様にした

        /*
         * mCameraMove.MoveStart();
         *
         * //カメラのズームイン終了まで待つ
         * while (true) {
         *      if (mCameraMove.IsMoveEnd) {
         *              break;
         *      }
         *      yield return null;
         * }
         */


        Goal g = mGoal[lDecideSelectStageNum];

        //
        //プレイヤーがドアに入っていく演出
        //
        yield return(WalkEnterDoor(g));


        //ステージ終了時の演出
        mTransition.CloseDoorParent();

        //演出が終了するまで待機
        while (true)
        {
            if (mTransition.GetCloseEnd())
            {
                break;
            }
            yield return(null);
        }

        //ステージ遷移
        UnityEngine.SceneManagement.SceneManager.LoadScene(Area.GetStageSceneName((lDecideSelectStageNum / 5) + 1, (lDecideSelectStageNum % 5) + 1));
    }
示例#5
0
    IEnumerator EndingCoroutine()
    {
        // プレイヤーから自機操作権限を奪う
        for (int idx = 0; idx < (int)VirtualController.CtrlCode.Max; idx++)
        {
            VirtualController.SetAxis((VirtualController.CtrlCode)idx, 0.0f, float.MaxValue);
        }

        // 重さ移しコンポーネントを取得
        MassShift shift = GameObject.FindObjectOfType <MassShift>();

        // プレイヤーから重さ移し権限を奪う
        shift.mOverrideInputFromScript = true;

        // ムービー帯を表示
        Camera.main.GetComponent <MovieBelt>().IsDisplay = true;

        // カーソル位置をプレイヤー位置に移動
        shift.SetCursorPosition(plTrans.position);

        // 待機
        yield return(new WaitForSeconds(1.6f));

        // BGM再生
        SoundManager.SPlay(musicSoundPrefab);

        // 待機
        yield return(new WaitForSeconds(2.4f));

        // カーソル位置のオブジェクトを生成
        GameObject cursorPoint = new GameObject("CursorPoint");

        cursorPoint.transform.parent = transform;

        // カーソルを移す元に移動
        HermiteCurveMove hermite = cursorPoint.AddComponent <HermiteCurveMove>();

        hermite.SetPoints(plTrans.position, shiftFromTrans.position, ((plTrans.position + shiftFromTrans.position) * 0.5f));
        while (hermite.Ratio <= 1.0f)
        {
            shift.SetCursorPosition(hermite.Point);
            yield return(null);
        }
        shift.SetCursorPosition(shiftFromTrans.position);
        Destroy(hermite);

        // 待機
        yield return(new WaitForSeconds(0.5f));

        // 重さ移し入力を有効化
        shift.mInputClick = true;

        // 待機
        yield return(new WaitForSeconds(0.5f));

        // カーソルを移す先に移動
        hermite = cursorPoint.AddComponent <HermiteCurveMove>();
        hermite.SetPoints(shiftFromTrans.position, shiftToTrans.position, ((shiftFromTrans.position + shiftToTrans.position) * 0.5f));
        while (hermite.Ratio <= 1.0f)
        {
            shift.SetCursorPosition(hermite.Point);
            yield return(null);
        }
        shift.SetCursorPosition(shiftToTrans.position);
        Destroy(hermite);

        // 待機
        yield return(new WaitForSeconds(0.5f));

        // 重さ移し入力を無効化
        shift.mInputClick = false;

        // カーソルを非表示
        shift.mInvisibleCursor = true;

        // カーソルを移動する時間を設定
        float cursorMoveTime = (Time.time + shift.ShiftTimes);

        // 重さ移し演出を強化
        List <GameObject> particleList = new List <GameObject>();
        Vector3           center       = ((shiftFromTrans.position + shiftToTrans.position) * 0.5f);
        Vector3           pointA       = new Vector3(((shiftFromTrans.position.x - center.x) * particleRandomVec + center.x), ((shiftToTrans.position.y - center.y) * particleRandomVec + center.y), center.z);
        Vector3           pointB       = new Vector3(((shiftToTrans.position.x - center.x) * particleRandomVec + center.x), ((shiftFromTrans.position.y - center.y) * particleRandomVec + center.y), center.z);
        float             lastWaitTime = Time.time;
        int endCnt = 1;

        SetSizeUpParticle((float)endCnt / (float)particleNum);
        for (int cnt = 1; cnt < particleNum; cnt++)
        {
            GameObject newParticle = Instantiate(shiftParticle);
            hermite = newParticle.AddComponent <HermiteCurveMove>();

            Vector3 vec      = new Vector3((Random.value * 2.0f - 1.0f), (Random.value * 2.0f - 1.0f), 0.0f).normalized;
            Vector3 midPoint = (shiftFromTrans.position) + vec * shiftHopForce;

            hermite.SetPoints(shiftFromTrans.position, shiftToTrans.position, midPoint);
            hermite.EndDestroy = true;
            particleList.Add(newParticle);

            SoundManager.SPlay(shiftSoundPrefab);

            while (Time.time < (lastWaitTime + particleStandbyTime))
            {
                // カーソル移動判定
                if (cursorMoveTime < Time.time)
                {
                    shift.SetCursorPosition(Vector3.right * 100.0f);
                }

                // 終了したパーティクルをカウント
                while ((particleList.Count > 0) && !particleList[0])
                {
                    particleList.RemoveAt(0);
                    endCnt++;
                    SetSizeUpParticle((float)endCnt / (float)particleNum);
                }
                yield return(null);
            }
            lastWaitTime = Time.time;
            //yield return new WaitForSeconds(particleStandbyTime);
        }

        // 待機
        lastWaitTime = Time.time;
        while (endCnt < (particleNum - 1))
        {
            // 終了したパーティクルをカウント
            while ((particleList.Count > 0) && !particleList[0])
            {
                SoundManager.SPlay(shiftSoundPrefab);
                particleList.RemoveAt(0);
                endCnt++;
                SetSizeUpParticle((float)endCnt / (float)particleNum);
                lastWaitTime = Time.time;
            }
            yield return(null);
        }
        SetSizeUpParticle(1.0f);

        // 待機
        yield return(new WaitForSeconds(0.08f));

        // 落下開始
        boxLockCol.transform.position += (Vector3.down * armCrashDownDis);

        // 待機
        yield return(new WaitForSeconds(0.15f));

        // アームを開く
        armAnim.Play("arm");
        boxLockCol.enabled = false;
        SoundManager.SPlay(impactSoundPrefab);

        // アーム移動
        SoundManager.SPlay(impactSoundPrefab);
        float armMoveBeginTime = Time.time;

        while (true)
        {
            if ((armMoveBeginTime + armMoveTime) <= Time.time)
            {
                break;
            }
            float ratio = ((Time.time - armMoveBeginTime) / armMoveTime);
            armTrans.position = new Vector3(Mathf.Lerp(armBefPoint.position.x, armAftPoint.position.x, ratio), Mathf.Lerp(armBefPoint.position.y, armAftPoint.position.y, ratio), Mathf.Lerp(armBefPoint.position.z, armAftPoint.position.z, ratio));
            armTrans.rotation = Quaternion.Slerp(armBefPoint.rotation, armAftPoint.rotation, ratio);
            yield return(null);
        }

        // 待機
        yield return(new WaitForSeconds(0.5f));

        // 着地演出
        ShakeCamera.ShakeAll(shakeTime, shakeMagnitude);
        GameObject impactEffectObj = Instantiate(impactEffect);

        impactEffectObj.transform.position = impactEffectTrans.position;
        SoundManager.SPlay(impactSoundPrefab);

        // 背景セルの色を全て変更
        foreach (var cell in backgroundCellList)
        {
            cell.PowerfulLighting(backgourndCellMidMat);
        }

        // 背景セルの色を変更する巨大化する球を生成
        GameObject cellChangeSphereObj = Instantiate(cellChangeSpherePrefab, cellChangeSpherePoint);

        cellChangeSphereObj.transform.localPosition = Vector3.zero;

        // 待機
        yield return(new WaitForSeconds(1.0f));

        // カメラを扉にズーム
        float   zoomBeginTime = Time.time;
        Vector3 defCamPos     = Camera.main.transform.position;

        while (true)
        {
            float ratio = ((Time.time - zoomBeginTime) / camZoomTime);

            if (ratio >= 1.0f)
            {
                Camera.main.transform.position = camZoomPoint.position;
                break;
            }

            Camera.main.transform.position = new Vector3(Mathf.Lerp(defCamPos.x, camZoomPoint.position.x, ratio), Mathf.Lerp(defCamPos.y, camZoomPoint.position.y, ratio), Mathf.Lerp(defCamPos.z, camZoomPoint.position.z, ratio));
            yield return(null);
        }

        // 扉を開く
        doorAnim.Play("Open");
        SoundManager.SPlay(doorOpenSoundPrefab);

        // 待機
        yield return(new WaitForSeconds(3.0f));

        // 自機を扉の前に移動
        while (plTrans.position.x < doorFrontTrans.position.x)
        {
            VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 0.1f);
            yield return(null);
        }

        // 自機の位置を補正
        plTrans.GetComponent <MoveManager>().StopMoveHorizontalAll();
        VirtualController.SetAxis(VirtualController.CtrlCode.Horizontal, 0.0f, float.MaxValue);
        plTrans.position = new Vector3(doorFrontTrans.position.x, plTrans.position.y, plTrans.position.z);

        // 自機を扉に向ける
        Player pl = plTrans.GetComponent <Player>();

        pl.CamLookDown     = true;
        pl.CameraLookRatio = 0.0f;
        pl.LookCamera();
        pl.enabled = false;
        Quaternion defPlRot    = pl.transform.rotation;
        Quaternion doorLookRot = Quaternion.LookRotation(doorInPointTrans.position - pl.transform.position) * Quaternion.Euler(0.0f, -90.0f, 0.0f);

        float doorLookBeginTime = Time.time;

        while (true)
        {
            float ratio = ((Time.time - doorLookBeginTime) / doorLookTime);
            if (ratio >= 1.0f)
            {
                plTrans.rotation = doorLookRot;
                break;
            }
            plTrans.rotation = Quaternion.Slerp(defPlRot, doorLookRot, ratio);
            yield return(null);
        }

        // 待機
        PlayerAnimation plAnim = pl.GetComponent <PlayerAnimation>();

        plAnim.StartStandBy();
        yield return(new WaitForSeconds(1.0f));

        plAnim.StartWalk();

        // 自機を扉の中に移動
        Camera.main.transform.parent = plTrans;
        Vector3 defPlPos        = plTrans.position;
        float   doorInBeginTime = Time.time;

        while (true)
        {
            float ratio = ((Time.time - doorInBeginTime) / doorInTime);
            if (ratio >= 1.0f)
            {
                plTrans.position = doorInPointTrans.position;
                break;
            }
            plTrans.position = new Vector3(Mathf.Lerp(defPlPos.x, doorInPointTrans.position.x, ratio), Mathf.Lerp(defPlPos.y, doorInPointTrans.position.y, ratio), Mathf.Lerp(defPlPos.z, doorInPointTrans.position.z, ratio));
            yield return(null);
        }

        // 待機
        yield return(new WaitForSeconds(0.75f));

        // 立ち止まる
        plAnim.StartStandBy();

        // ムービー帯解除
        Camera.main.GetComponent <MovieBelt>().IsDisplay = false;
        while (Camera.main.GetComponent <MovieBelt>().Ratio <= 0.0f)
        {
            yield return(null);
        }
        ;

        // 待機
        yield return(new WaitForSeconds(0.5f));

        float creditBeginTime = Time.time;

        while (true)
        {
            float ratio = ((Time.time - creditBeginTime) / creditTime);
            if (ratio >= 1.0f)
            {
                creditTrans.position = creditEndPoint.position;
                break;
            }
            creditTrans.position = new Vector3(Mathf.Lerp(creditBeginPoint.position.x, creditEndPoint.position.x, ratio), Mathf.Lerp(creditBeginPoint.position.y, creditEndPoint.position.y, ratio), Mathf.Lerp(creditBeginPoint.position.z, creditEndPoint.position.z, ratio));
            yield return(null);
        }

        // 待機
        yield return(new WaitForSeconds(4.3f));

        // シーン遷移
        ((ChangeScene)FindObjectOfType(typeof(ChangeScene))).OnTitleButtonDown();               // タイトルへ
    }