CameraCharacter.ViewParameters GenerateViewParameterByStatus(Vector3?pos = null, Quaternion?rot = null, PanoramaBlock panoramaBlock = null)
    {
        CameraCharacter.ViewParameters ret = new CameraCharacter.ViewParameters();
        switch (status)
        {
        case BlockCombinationStatus.Combine:
            ret.viewMode        = CameraViewMode.HorizontalFreeView;
            ret.initialRotation = CameraCharacter.Singleton.fixedViewRotation;
            ret.cameraZOffset   = 24f;
            break;

        case BlockCombinationStatus.CombineInsidePreview:
            ret.viewMode        = CameraViewMode.HorizontalHalfFreeView;
            ret.initialRotation = CameraCharacter.Singleton.lookDownViewRotation;
            ret.cameraZOffset   = 25f;
            ret.cameraScaleMode = CameraScaleMode.MoveCamera;
            break;

        case BlockCombinationStatus.Divide:
            ret.viewMode        = CameraViewMode.FixedView;
            ret.cameraZOffset   = 22f;
            ret.initialPosition = CameraCharacter.Singleton.fixedViewPosition;
            ret.initialRotation = CameraCharacter.Singleton.fixedViewRotation;
            break;

        case BlockCombinationStatus.FocusOnOneBlock:
            ret.viewMode        = CameraViewMode.HorizontalHalfFreeView;
            ret.initialPosition = CameraCharacter.Singleton.lookDownViewPosition;
            ret.initialRotation = CameraCharacter.Singleton.lookDownViewRotation;
            ret.cameraZOffset   = 18f;
            ret.cameraXOffset   = 5f;
            ret.cameraScaleMode = CameraScaleMode.MoveCamera;
            break;

        case BlockCombinationStatus.Indoor:
            ret.viewMode        = CameraViewMode.FreeView;
            ret.viewContentType = ViewContentType.PanoramaView;
            if (panoramaBlock != null)
            {
                ret.FadeInFlag = panoramaBlock.PanoramaContentReady;
            }
            ret.cameraZOffset   = 0f;
            ret.initialPosition = pos;
            ret.initialRotation = rot;
            ret.cameraScaleMode = CameraScaleMode.ScaleFov;
            break;

        case BlockCombinationStatus.SpecialScene:
            break;

        default:
            break;
        }

        return(ret);
    }
    public void EnterSpecialScene(string sceneName)
    {
        if (currentSpecialScene != null)
        {
            return;
        }

        foreach (var s in allSpecialScenes)
        {
            if (s == null)
            {
                continue;
            }
            if (s.specialSceneName == sceneName)
            {
                currentSpecialScene = s;
                break;
            }
        }

        if (currentSpecialScene == null)
        {
            return;
        }
        var ret = new CameraCharacter.ViewParameters();

        ret.viewMode        = currentSpecialScene.sceneViewMode;
        ret.viewContentType = currentSpecialScene.sceneViewContentType;
        ret.cameraZOffset   = 0f;
        ret.initialPosition = currentSpecialScene.sceneViewCenter.position;
        ret.initialRotation = currentSpecialScene.sceneViewCenter.rotation;
        ret.forceFading     = true;

        if (currentSpecialScene.sceneViewContentType == ViewContentType.PanoramaView && currentSpecialScene.viewContentDelegation != null)
        {
            currentSpecialScene.viewContentDelegation.DownloadAssetBundle();
            ret.FadeInFlag = currentSpecialScene.viewContentDelegation.PanoramaContentReady;
        }

        statusBeforeSpecialScene = status;
        status = BlockCombinationStatus.SpecialScene;
        CameraCharacter.Singleton.PushView(ret, true);
        currentSpecialScene.OnEnterSpecialScene();
    }