Изменение разрешения экрана
Zills Дата: Чт, 14 Авг 2014, 13:46 | Сообщение # 1
Сообщений: 17
Награды:
0
Репутация:
0
Статус: Offline
Всем привет. Написал систему изменения разрешения экрана и сохранение его в другой скрипт, чтобы при переходе на другой уровень скрипт, куда все сохраняется, забирал данные с собой. Меню: Код
using System.Collections; public class Menu : MonoBehaviour { private int _window = 0; private int ResolutInMenu = 7; private menuDatabase MD; void Awake () { MD = GameObject.FindGameObjectWithTag("Database").GetComponent<menuDatabase>(); } void Update () { if(ResolutInMenu < 1) { ResolutInMenu = 9; } if(ResolutInMenu > 9) { ResolutInMenu = 1; } } void OnGUI () { if(_window == 0) { if(GUI.Button(new Rect(10,10,150,20), "Играть")) { Application.LoadLevel(1); } if(GUI.Button(new Rect(10,40,150,20), "Настройки")) { _window = 1; } if(GUI.Button(new Rect(10,70,150,20), "Выход")) { Application.Quit(); } } if(_window == 1) { if(GUI.Button(new Rect(10,10,150,20), "Видео")) { _window = 2; } if(GUI.Button(new Rect(10,40,150,20), "Аудио")) { _window = 3; } if(GUI.Button(new Rect(10,70,150,20), "Назад")) { _window = 0; } } if(_window == 2) { GUI.Label(new Rect(10,10,200,100), "Разрешение экрана"); if(GUI.Button(new Rect(140,10,20,20), "<")) { ResolutInMenu --; } if(GUI.Button(new Rect(280,10,20,20), ">")) { ResolutInMenu ++; } if(ResolutInMenu == 1) { GUI.Label(new Rect(190,10,200,100), "1024x768"); } if(ResolutInMenu == 2) { GUI.Label(new Rect(190,10,200,100), "1152x864"); } if(ResolutInMenu == 3) { GUI.Label(new Rect(190,10,200,100), "1280x800"); } if(ResolutInMenu == 4) { GUI.Label(new Rect(190,10,200,100), "1280x1024"); } if(ResolutInMenu == 5) { GUI.Label(new Rect(190,10,200,100), "1366x768"); } if(ResolutInMenu == 6) { GUI.Label(new Rect(190,10,200,100), "1440x900"); } if(ResolutInMenu == 7) { GUI.Label(new Rect(190,10,200,100), "1600x900"); } if(ResolutInMenu == 8) { GUI.Label(new Rect(190,10,200,100), "1680x1050"); } if(ResolutInMenu == 9) { GUI.Label(new Rect(190,10,200,100), "1920x1080"); } if(GUI.Button(new Rect(10,40,150,20), "Сохранить")) { MD.NumberResolut = ResolutInMenu; _window = 1; } } } }
И сам скрипт, куда все сохраняется: Код
using UnityEngine; using System.Collections; public class menuDatabase : MonoBehaviour { [HideInInspector]public int NumberResolut = 7; void Update () { if(NumberResolut == 1) { Screen.SetResolution(1024, 768, true); } if(NumberResolut == 2) { Screen.SetResolution(1152, 864, true); } if(NumberResolut == 3) { Screen.SetResolution(1280, 800, true); } if(NumberResolut == 4) { Screen.SetResolution(1280, 1024, true); } if(NumberResolut == 5) { Screen.SetResolution(1366, 768, true); } if(NumberResolut == 6) { Screen.SetResolution(1440, 900, true); } if(NumberResolut == 7) { Screen.SetResolution(1600, 900, true); } if(NumberResolut == 8) { Screen.SetResolution(1680, 1050, true); } if(NumberResolut == 9) { Screen.SetResolution(1920, 1080, true); } } }
Проблема в том, что при запуске игры экран моргает, очень быстро (мой вывод таков, что постоянно меняется разрешение экрана). Кто знает, где я накосячил? Помогите, пожалуйста.
Сообщение отредактировал Zills - Чт, 14 Авг 2014, 13:47
Сообщение Всем привет. Написал систему изменения разрешения экрана и сохранение его в другой скрипт, чтобы при переходе на другой уровень скрипт, куда все сохраняется, забирал данные с собой. Меню: Код
using System.Collections; public class Menu : MonoBehaviour { private int _window = 0; private int ResolutInMenu = 7; private menuDatabase MD; void Awake () { MD = GameObject.FindGameObjectWithTag("Database").GetComponent<menuDatabase>(); } void Update () { if(ResolutInMenu < 1) { ResolutInMenu = 9; } if(ResolutInMenu > 9) { ResolutInMenu = 1; } } void OnGUI () { if(_window == 0) { if(GUI.Button(new Rect(10,10,150,20), "Играть")) { Application.LoadLevel(1); } if(GUI.Button(new Rect(10,40,150,20), "Настройки")) { _window = 1; } if(GUI.Button(new Rect(10,70,150,20), "Выход")) { Application.Quit(); } } if(_window == 1) { if(GUI.Button(new Rect(10,10,150,20), "Видео")) { _window = 2; } if(GUI.Button(new Rect(10,40,150,20), "Аудио")) { _window = 3; } if(GUI.Button(new Rect(10,70,150,20), "Назад")) { _window = 0; } } if(_window == 2) { GUI.Label(new Rect(10,10,200,100), "Разрешение экрана"); if(GUI.Button(new Rect(140,10,20,20), "<")) { ResolutInMenu --; } if(GUI.Button(new Rect(280,10,20,20), ">")) { ResolutInMenu ++; } if(ResolutInMenu == 1) { GUI.Label(new Rect(190,10,200,100), "1024x768"); } if(ResolutInMenu == 2) { GUI.Label(new Rect(190,10,200,100), "1152x864"); } if(ResolutInMenu == 3) { GUI.Label(new Rect(190,10,200,100), "1280x800"); } if(ResolutInMenu == 4) { GUI.Label(new Rect(190,10,200,100), "1280x1024"); } if(ResolutInMenu == 5) { GUI.Label(new Rect(190,10,200,100), "1366x768"); } if(ResolutInMenu == 6) { GUI.Label(new Rect(190,10,200,100), "1440x900"); } if(ResolutInMenu == 7) { GUI.Label(new Rect(190,10,200,100), "1600x900"); } if(ResolutInMenu == 8) { GUI.Label(new Rect(190,10,200,100), "1680x1050"); } if(ResolutInMenu == 9) { GUI.Label(new Rect(190,10,200,100), "1920x1080"); } if(GUI.Button(new Rect(10,40,150,20), "Сохранить")) { MD.NumberResolut = ResolutInMenu; _window = 1; } } } }
И сам скрипт, куда все сохраняется: Код
using UnityEngine; using System.Collections; public class menuDatabase : MonoBehaviour { [HideInInspector]public int NumberResolut = 7; void Update () { if(NumberResolut == 1) { Screen.SetResolution(1024, 768, true); } if(NumberResolut == 2) { Screen.SetResolution(1152, 864, true); } if(NumberResolut == 3) { Screen.SetResolution(1280, 800, true); } if(NumberResolut == 4) { Screen.SetResolution(1280, 1024, true); } if(NumberResolut == 5) { Screen.SetResolution(1366, 768, true); } if(NumberResolut == 6) { Screen.SetResolution(1440, 900, true); } if(NumberResolut == 7) { Screen.SetResolution(1600, 900, true); } if(NumberResolut == 8) { Screen.SetResolution(1680, 1050, true); } if(NumberResolut == 9) { Screen.SetResolution(1920, 1080, true); } } }
Проблема в том, что при запуске игры экран моргает, очень быстро (мой вывод таков, что постоянно меняется разрешение экрана). Кто знает, где я накосячил? Помогите, пожалуйста. Автор - Zills Дата добавления - 14 Авг 2014 в 13:46
Левша Дата: Чт, 14 Авг 2014, 14:37 | Сообщение # 2
Черный Волк
Сообщений: 7257
Награды:
30
Репутация:
3313
Статус: Offline
Цитата Zills (
)
чтобы при переходе на другой уровень скрипт, куда все сохраняется, забирал данные с собой.
А зачем ? Разрешение выставляется для приложения только один раз при запуске, а не для каждой сцены в отдельности... И кто меняет разрешение экрана в Update ? Ты хотя бы заглушку поставь что ли, чтобы оно только 1 раз сработало.
X.cor.R (Prologue)
Сообщение Цитата Zills (
)
чтобы при переходе на другой уровень скрипт, куда все сохраняется, забирал данные с собой.
А зачем ? Разрешение выставляется для приложения только один раз при запуске, а не для каждой сцены в отдельности... И кто меняет разрешение экрана в Update ? Ты хотя бы заглушку поставь что ли, чтобы оно только 1 раз сработало.Автор - Левша Дата добавления - 14 Авг 2014 в 14:37
Zills Дата: Чт, 14 Авг 2014, 15:02 | Сообщение # 3
Сообщений: 17
Награды:
0
Репутация:
0
Статус: Offline
Цитата Левша (
)
А зачем ?
Просто сам скрипт, первый, мне не надо переносить на другую сцену, а если я на другой сцене нажму паузу и захочу изменить разрешение экрана? То не смогу же.
Сообщение Цитата Левша (
)
А зачем ?
Просто сам скрипт, первый, мне не надо переносить на другую сцену, а если я на другой сцене нажму паузу и захочу изменить разрешение экрана? То не смогу же.Автор - Zills Дата добавления - 14 Авг 2014 в 15:02
commandoby Дата: Чт, 14 Авг 2014, 16:58 | Сообщение # 4
Unity 3D Free
Сообщений: 836
Награды:
3
Репутация:
211
Статус: Offline
Цитата Zills (
)
а если я на другой сцене нажму паузу и захочу изменить разрешение экрана? То не смогу же.
Почему? Что тебя остановит? Нельзя использовать код паузы с возможностью изменения разрешния?
Блог.
Сообщение Цитата Zills (
)
а если я на другой сцене нажму паузу и захочу изменить разрешение экрана? То не смогу же.
Почему? Что тебя остановит? Нельзя использовать код паузы с возможностью изменения разрешния?Автор - commandoby Дата добавления - 14 Авг 2014 в 16:58
Zills Дата: Чт, 14 Авг 2014, 18:39 | Сообщение # 5
Сообщений: 17
Награды:
0
Репутация:
0
Статус: Offline
Цитата commandoby (
)
Почему? Что тебя остановит? Нельзя использовать код паузы с возможностью изменения разрешения?
Как мне тогда на другом уровне, при включении паузы и захода в настройки, уже с помощью GUI.Label вывести текущее разрешение экрана?
Сообщение Цитата commandoby (
)
Почему? Что тебя остановит? Нельзя использовать код паузы с возможностью изменения разрешения?
Как мне тогда на другом уровне, при включении паузы и захода в настройки, уже с помощью GUI.Label вывести текущее разрешение экрана?Автор - Zills Дата добавления - 14 Авг 2014 в 18:39
Hunjeth Дата: Чт, 14 Авг 2014, 22:55 | Сообщение # 6
Сообщений: 354
Награды:
1
Репутация:
112
Статус: Offline
Попробуй этот метод, при загрузке уровня настройки в скрипте не слетят, ты можещь создать переменную разрешения и она сохраниться. Код
void Start() { DontDestroyOnLoad(this); }
Сообщение отредактировал Hunjeth - Чт, 14 Авг 2014, 23:00
Сообщение Попробуй этот метод, при загрузке уровня настройки в скрипте не слетят, ты можещь создать переменную разрешения и она сохраниться. Код
void Start() { DontDestroyOnLoad(this); }
Автор - Hunjeth Дата добавления - 14 Авг 2014 в 22:55
seaman Дата: Пт, 15 Авг 2014, 15:31 | Сообщение # 7
Гуру
Сообщений: 1748
Награды:
10
Репутация:
660
Статус: Offline
Цитата
текущее разрешение экрана
Нужно просто не игнорировать мануал, который кто-то старался для Вас же писал. Там это находится мгновенно.
Сообщение Цитата
текущее разрешение экрана
Нужно просто не игнорировать мануал, который кто-то старался для Вас же писал. Там это находится мгновенно.Автор - seaman Дата добавления - 15 Авг 2014 в 15:31