// 3D로 변경
    private IEnumerator ChangeView3D()
    {
        m_isChnaging = true;
        m_viewType   = m_view3D;

        // 2D 벽 삭제
        Wall2D_SetActive(false);

        // 2D변경 상자의 충돌 체크 끄기
        m_changeViewRect_S.CollisionCheckEnable(false);
        // 2D 변경 상자 켜기
        m_changeViewRect_GO.SetActive(true);

        // changeBox 안에 오브젝트만 renderer 및 collider2D 끄기
        m_changeViewRect_S.IncludeWOEnable(false);

        // 월드의 모든 오브젝트의 renderer 켜기
        GameManager.Instance.WorldManager.RendererEnable(true);

        // 플레이어 변경
        m_playerManager.ChangePlayer();

        // 블루큐브 변경
        GameManager.Instance.BlueCubeManager.ChangeCube();

        // 그림자 켜기
        GameManager.Instance.LightManager.ShadowEnable(true);

        // 카메라 무빙워크 (사이드뷰에서 쿼터뷰로 이동)
        yield return(StartCoroutine(GameManager.Instance.CameraManager.MovingWork2D()));

        // z 감소수치 새로 계산
        // z 감소수치는 x,y랑 똑같이 줄게하기위해 x,y 증가수치로 계산
        m_decreaseVector.z = -((m_changeViewRect_GO.transform.localScale.z - m_blueCubeSize.z) * m_increaseSizePerXY * 0.01f);

        // 2D 변경 상자 크기 줄이기
        while (true)
        {
            // 크기 줄이기
            m_changeViewRect_GO.transform.localScale += m_decreaseVector * Time.deltaTime;

            // 블루큐브 사이즈만큼 작아지면 다음으로 넘어감
            if (m_changeViewRect_GO.transform.localScale.x <= m_blueCubeSize.x)
            {
                break;
            }

            yield return(null);
        }

        // 2D 변경 상자 끄기
        m_changeViewRect_GO.SetActive(false);

        m_isChnaging = false;
    }
    // 2D로 변경
    private IEnumerator ChangeView2D()
    {
        bool doChange = false;

        m_isChnaging = true;

        // 플레이어가 어디에도 속하지 않게 변경
        transform.parent = null;

        Vector3 blueCubePosition = GameManager.Instance.BlueCubeManager.transform.position;

        // 2D 변경 상자의 시작 위치를 블루큐브 위치로 잡고 활성화
        m_changeViewRect_GO.transform.eulerAngles = Vector3.zero;
        m_changeViewRect_GO.transform.localScale  = m_blueCubeSize;
        Vector3 startPosition = blueCubePosition;

        startPosition.z += m_blueCubeSize.z * 0.5f;
        m_changeViewRect_GO.transform.position = startPosition;
        m_changeViewRect_GO.SetActive(true);
        // 2D변경 상자의 충돌체크 켜기
        m_changeViewRect_S.CollisionCheckEnable(true);

        // 2D 변경 상자 x, y 커지게 하기
        while (true)
        {
            // x, y 크기 키우기
            m_changeViewRect_GO.transform.localScale += m_increaseVectorXY * Time.deltaTime;

            if (m_changeViewRect_GO.transform.localScale.x >= m_maxSizeX)
            {
                break;
            }

            yield return(null);
        }

        // 2D 변경 상자 z 커졌다 작아졌다 반복 (시점변환 키를 누르고 있는동안에만 적용)
        // 시점변환 키를 다시 누를경우 다음으로 넘어감
        // 상자는 z양의 방향으로만 커짐

        bool  isIncrease = true;
        float addTime    = 0f;

        while (true)
        {
            // 시점변환 키를 누를경우 시점변경
            if (Input.GetKeyDown(m_playerManager.ChangeViewKey))
            {
                doChange = true;
                break;
            }

            // 제한시간 체크
            // 제한시간이 다지나면 시점변경 취소
            addTime += Time.deltaTime;
            if (addTime >= m_changeLimitTime)
            {
                doChange = false;
                break;
            }

            // 커지게하기
            if (isIncrease)
            {
                // 크기변환
                m_changeViewRect_GO.transform.localScale += m_increaseVectorZ * Time.deltaTime;
            }
            // 작아지게 하기
            else
            {
                // 크기변환
                m_changeViewRect_GO.transform.localScale -= m_increaseVectorZ * Time.deltaTime;
            }

            // 이동
            Vector3 newPosition  = m_changeViewRect_GO.transform.position;
            float   newPositionZ = m_blueCubeSize.z * m_changeViewRect_GO.transform.localScale.z * 0.5f;
            newPosition.z = newPositionZ + blueCubePosition.z;
            m_changeViewRect_GO.transform.position = newPosition;

            // 최대제한 z크기보다 작을경우 작아지게 하기 위한 변수 설정
            if (m_changeViewRect_GO.transform.localScale.z >= m_maxSizeZ)
            {
                isIncrease = false;
            }
            else if (m_changeViewRect_GO.transform.localScale.z <= m_blueCubeSize.z)
            {
                isIncrease = true;
            }

            yield return(null);
        }

        // 변경이 허용됬을 경우에 실행
        if (doChange)
        {
            // 2D상태로 변경됬다고 설정
            m_viewType = m_view2D;

            // 월드 모든 오브젝트의 renderer 끄기
            GameManager.Instance.WorldManager.RendererEnable(false);

            // changeBox 안에 오브젝트만 renderer 및 collider2D 켜기
            m_changeViewRect_S.IncludeWOEnable(true);
            // 메테리얼 원래상태로 만들기
            m_changeViewRect_S.SetDefaultMaterial();

            // 플레이어 변경
            m_playerManager.ChangePlayer();

            // 블루큐브 변경
            GameManager.Instance.BlueCubeManager.ChangeCube();

            // 카메라 무빙워크 (쿼터뷰에서 사이드뷰로 이동)
            yield return(StartCoroutine(GameManager.Instance.CameraManager.MovingWork3D()));

            // 2D 벽 생성
            Wall2D_SetActive(true);

            // 그림자 끄기
            GameManager.Instance.LightManager.ShadowEnable(false);
        }
        // 변경이 허용되지 않았을경우 원래상태로 돌아감
        else
        {
            // 2D변경 상자 충돌체크 끄기
            m_changeViewRect_S.CollisionCheckEnable(false);
            // 메테리얼 원래상태로 변경
            m_changeViewRect_S.SetDefaultMaterial();
            // 리스트 클리어
            m_changeViewRect_S.ClearList();

            // z 감소수치 새로 계산
            // z 감소수치는 x,y랑 똑같이 줄게하기위해 x,y 증가수치로 계산
            m_decreaseVector.z = -((m_changeViewRect_GO.transform.localScale.z - m_blueCubeSize.z) * m_increaseSizePerXY * 0.01f);

            // 2D 변경 상자 크기 줄이기
            while (true)
            {
                // 크기 줄이기
                m_changeViewRect_GO.transform.localScale += m_decreaseVector * Time.deltaTime;

                // 블루큐브 사이즈만큼 작아지면 다음으로 넘어감
                if (m_changeViewRect_GO.transform.localScale.x <= m_blueCubeSize.x)
                {
                    break;
                }

                yield return(null);
            }
        }

        // 모든 설정이 끝나면 2D 변경 상자를 비활성화
        m_changeViewRect_GO.SetActive(false);

        m_isChnaging = false;
    }