2016-08-05 2 views
-1

В 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

+0

Что ты имеешь в виду замораживание? Вы имеете в виду, что ориентация должна оставаться такой же, а не изменяться? – Programmer

+0

Да, точно. Я хочу, чтобы отображаемые объекты на экране оставались неизменными, даже если я изменяю ориентацию экрана. – Johan

+0

Совершенно неясно, что вы подразумеваете под «замораживанием» экрана.Вам придется удалить это слово. Может быть, вы хотите *** отключить вращение ***, возможно, во время процесса загрузки, и только *** включить ротацию *** позже? – Fattie

ответ

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

Ориентация на замораживание

freezeOrientation(true); 

Un-сублимационной Ориентация

freezeOrientation(false); 
+0

Спасибо, но нет, это не сработало. Я думаю, что моя проблема теперь более определена, проверьте мое редактирование. – Johan

+0

** «Я думаю, что моя проблема теперь более определенна **« Я так не думаю. Я изменил название, чтобы иметь смысл, после чего вы изменили его на то, что не имеет смысла. Обновленный код, который у вас есть в вашем вопросе, не похож на код в моем ответе. Пока вы не обновите свой код, чтобы отразить то, что в моем ответе, я не могу сказать, что вы делаете неправильно. Весь мой код делает отключение вращения - это все ориентирование. – Programmer

0

Используйте приведенные ниже строки в вашем Start() или Awake() на активный объект в сценах, которые требуют изменения ориентации. Выберите любой из линий относительно предполагаемого ориентации

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

Поскольку эти логические ориентации так сенсорным координат изменяются также с текущей ориентацией.

Вам необходимо изменить начальный старт второго класса, чтобы после инициализации и отключения загрузки сцены он изменился.

class secondClass(){ 
void Start() 
{ 
     Init(a lot of stuff); 

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

     Screen.orientation = ScreenOrientation.LandscapeLeft; 
} 
} 
0

Как и следовало ожидать, это поведение не только в единстве, но и в любом игровом движке.

Почему я так думаю? Когда вы загружаете другую сцену, нужно уничтожить старую сцену :) Как это много ресурсов :)

Как мне кажется, вам нужно сохранить всю информацию об объектах на сцене. Загрузите другую сцену. Делай, что тебе нужно. И вернитесь к этой сцене и восстановите настройки.

или задать свой вопрос по-другому: сказать об ожидаемых результатах, и спросить, как сделать это лучше :)

Смежные вопросы