如何冻结屏幕?

时间:2016-08-05 13:17:58

标签: c# unity3d

在Unity中,如何在一个场景中冻结屏幕,更改场景,然后在另一个场景中解冻它?冻结屏幕我只是意味着它在冻结时不会更新。屏幕上我只是这个意思:https://i.gyazo.com/10f8673d28da776c064fbb0e716866ad.jpg

我已经尝试设置Time.timeScale = 0,但这没有用。

事情是我在场景中有不同的屏幕方向:第一个是肖像,另一个是风景。这会导致第二个场景扭曲/破坏第一个场景中加载的加载屏幕。在第二个场景中初始化的内容需要横向方向,因此我无法在所有内容初始化后更改屏幕方向。

我只想在加载图像加载后冻结屏幕,然后在第二个场景初始化后解冻它。这可能吗?

这是我目前的代码,概括:

// Script for the first scene
class firstClass(){
    IEnumerator ChangeScene(){
        // Display loading screen in portrait orientation
        loadingScreen.SetActive(true);
        // Load the second scene
        SceneManager.LoadSceneAsync("secondScene");
    }
}

// Script for the second scene
class secondClass(){
     Start(){
         Screen.orientation = ScreenOrientation.LandscapeLeft; // twists the loading screen :(
         Init(a lot of stuff) // Needs landscape orientation to be initialized properly

         // Init done, hide loading screen
         loadingScreen.SetActive(false);

     }
}

这就是我希望它发挥作用的方式:

class firstClass(){
    IEnumerator ChangeScene(){
        // Display loading screen in portrait orientation
        loadingScreen.SetActive(true);
        FreezeScreen();
        SceneManager.LoadSceneAsync("secondScene");
    }
}

class secondClass(){
     Start(){
         Screen.orientation = ScreenOrientation.LandscapeLeft; // doesn't affect the loading screen because the screen is frozen!
         Init(a lot of stuff);
         UnfreezeScreen();
         // Init done, hide loading screen
         loadingScreen.SetActive(false);

     }
}

这是一个例子: https://gyazo.com/864303465be750b7970636415ddf070d

2 个答案:

答案 0 :(得分:0)

void freezeOrientation(bool freezeOrnt = true)
{
    Screen.autorotateToLandscapeLeft = freezeOrnt;
    Screen.autorotateToLandscapeRight = freezeOrnt;
    Screen.autorotateToPortrait = freezeOrnt;
    Screen.autorotateToPortraitUpsideDown = freezeOrnt;
}

冻结方向

freezeOrientation(true);

取消冻结方向

freezeOrientation(false);

答案 1 :(得分:0)

在需要修改方向的场景中,在^(.*?)(\d+) (may) (2016)$ Start()上的活动对象上使用以下行。选择与您的预期方向相关的任何行

Awake()

由于这些是逻辑方向,因此触摸坐标也会随着当前方向而改变。

您需要修改第二个类的开始,以便在初始化后禁用加载场景。

void Awake()
{
 Screen.orientation = ScreenOrientation.LandscapeLeft;
 //OR
 Screen.orientation = ScreenOrientation.Portrait; 
}