예제 #1
0
    /*
     * IEnumerator FadeInFadeOut(CameraAndMask fadeIn, CameraAndMask fadeOut, float time)
     * {
     *  float startTime = Time.timeSinceLevelLoad;
     *  float diff = Time.timeSinceLevelLoad - startTime;
     *  Color maskAlpha = new Color(0, 0, 0, 0);
     *
     *  while (diff < (time / 2f))
     *  {
     *      diff = Time.timeSinceLevelLoad - startTime;
     *      maskAlpha.a = diff / (time / 2);
     *      fadeIn.mask.color = maskAlpha;
     *      yield return null;
     *  }
     *  fadeIn.camera.SetActive(false);
     *  guideObjct.SetActive(false);
     *
     *  playerCharacter.SetActive(!playerCharacter.activeInHierarchy);
     *  cutSceneP1.SetActive(!cutSceneP1.activeInHierarchy);
     *  cutSceneP2.SetActive(!cutSceneP2.activeInHierarchy);
     *
     *  StringView.Instance.cutP1 = P1Pivot.transform;
     *  StringView.Instance.cutP2 = P2Pivot.transform;
     *
     *  for (int i = 0; i < targetObjcts.Length; i++)
     *  {
     *      targetObjcts[i].SetActive(true);
     *  }
     *  CutSceneCamera[cameraIndex].camera.transform.LookAt(targetTransform);
     *  StringView.Instance.isPlayCutScene = !StringView.Instance.isPlayCutScene;
     *  SoundManager.Instance.StopBGM("asioto");
     *  fadeOut.camera.SetActive(true);
     *
     *  startTime = Time.timeSinceLevelLoad;
     *  diff = Time.timeSinceLevelLoad - startTime;
     *  while (diff < time / 2)
     *  {
     *      diff = Time.timeSinceLevelLoad - startTime;
     *      maskAlpha.a = 1 - (diff / (time / 2));
     *      fadeOut.mask.color = maskAlpha;
     *      yield return null;
     *  }
     * }
     */

    protected override IEnumerator Boot()
    {
        int beforeAnimHash = cutAnim.GetCurrentAnimatorStateInfo(0).shortNameHash;

        if (isOn == false)
        {
            isOn = true;
            cutAnim.SetTrigger(cut.ToString());
            //if (guideObjct != null && nextMonument != null) nextMonument.Guid();
            InputController.ExtendMaxDistanceLength(extendLength);
        }
        else if (guideObjct != null && guideObjct.activeInHierarchy == true)
        {
            guideObjct.SetActive(false);
        }

        bool cutChange = true;

        if (cutChange)
        {
            for (int i = 0; i < CutSceneCamera.Length - 1; i++)
            {
                while (
                    cutAnim.GetCurrentAnimatorStateInfo(0).shortNameHash == beforeAnimHash ||
                    cutAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < 1)//発生させたいフレーム/アニメーションの総フレーム数
                {
                    if (cut.ToString() == "Cut3")
                    {
                        CutSceneCamera[cameraIndex].camera.transform.LookAt(targetTransform);
                    }
                    for (int j = 0; j < pt.Length; j++)
                    {
                        if (cutAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < (pt[j].playParticleFrame / totalFrame))
                        {
                            for (int k = 0; k < pt[j].particle.Length; k++)
                            {
                                pt[j].particle[k].Play();
                            }
                        }
                    }
                    yield return(null);
                }

                beforeAnimHash = cutAnim.GetCurrentAnimatorStateInfo(0).shortNameHash;

                if (cameraIndex < CutSceneCamera.Length - 1)
                {
                    CutSceneCamera[cameraIndex].camera.SetActive(false);
                    cameraIndex++;
                    CutSceneCamera[cameraIndex].camera.SetActive(true);
                    cutAnim.SetTrigger("Next");
                }
            }

            if (cut == CUT.ED)
            {
                while (
                    cutAnim.GetCurrentAnimatorStateInfo(0).shortNameHash == beforeAnimHash ||
                    cutAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < (750 / totalFrame))//発生させたいフレーム/アニメーションの総フレーム数
                {
                    //flash.transform.localScale += new Vector3(0.5f, 0.5f, 0.5f);
                    if (pulse.baseScale.x > 0)
                    {
                        pulse.baseScale -= new Vector3(0.01f, 0.01f, 0.01f);
                    }
                    yield return(null);
                }
                while (
                    cutAnim.GetCurrentAnimatorStateInfo(0).shortNameHash == beforeAnimHash ||
                    cutAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < (860 / totalFrame))//発生させたいフレーム/アニメーションの総フレーム数
                {
                    flash._limitScale          += new Vector3(0.1f, 0.1f, 0.1f);
                    flash.transform.localScale += new Vector3(0.1f, 0.1f, 0.1f);
                    yield return(null);
                }
                yield return(StartCoroutine(WhiteIn(CutSceneCamera[cameraIndex], 2f)));

                flash._limitScale          = new Vector3(0f, 0f, 0f);
                flash.transform.localScale = new Vector3(0f, 0f, 0f);
                //flash.transform
                yield return(new WaitForSeconds(1f));

                yield return(StartCoroutine(WhiteOut(CutSceneCamera[cameraIndex], 1f)));
            }
            while (
                cutAnim.GetCurrentAnimatorStateInfo(0).shortNameHash == beforeAnimHash ||
                cutAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < (playParticleFrame / totalFrame))//発生させたいフレーム/アニメーションの総フレーム数
            {
                CutSceneCamera[cameraIndex].camera.transform.LookAt(targetTransform);

                for (int j = 0; j < pt.Length; j++)
                {
                    if (cutAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < (pt[j].playParticleFrame / totalFrame))
                    {
                        for (int k = 0; k < pt[j].particle.Length; k++)
                        {
                            pt[j].particle[k].Play();
                        }
                    }
                }
                yield return(null);
            }
        }
        else
        {
            while (
                cutAnim.GetCurrentAnimatorStateInfo(0).shortNameHash == Animator.StringToHash("New State") ||
                cutAnim.GetCurrentAnimatorStateInfo(0).normalizedTime < (40f / 45f))//発生させたいフレーム/アニメーションの総フレーム数
            {
                yield return(null);
            }
        }
        if (particle != null)
        {
            SoundManager.Instance.PlaySE("se object");
            particle.Play();
        }
        for (int i = 0; i < targetObjcts.Length; i++)
        {
            targetObjcts[i].SetActive(false);
        }
    }