#android #unity3d #optimization
#Android #unity3d #оптимизация
Вопрос:
Я пытаюсь оптимизировать графику игры, которую я создаю в Unity, и я нашел этот код, который улучшает мой FPS, но я не знаю, почему каждый раз, когда он меняет сцену, он выполняется снова. Я попытался с помощью DontDestroyOnLoad … создать логическое значение, чтобы эта часть могла быть выполнена только один раз… но ничего.
Код такой:
[SerializeField]
float factor = 0.5f;
void Start ()
{
Screen.SetResolution(
Mathf.CeilToInt(Screen.currentResolution.width * factor),
Mathf.CeilToInt(Screen.currentResolution.height * factor), true);
}
Что я могу делать неправильно?
Спасибо, приветствую.
Комментарии:
1. Существует ли этот скрипт для объекта в каждой сцене? если да, то именно поэтому он выполняется в каждой сцене… Я бы предложил поместить это на 1 объект в 1 сцене, который когда-либо будет загружен один раз (например, заставка), затем убедитесь, что он не существует ни на одном другом объекте.
2. Я попытался поместить его в пустой объект и DontDestroyOnLoad, чтобы он больше не запускался, но в игре каждый раз, когда я меняю сцену, она теряет половину качества. Я также попытался создать логическое значение, чтобы код выполнялся только один раз, но это происходит одинаково. (Я чувствую свой английский)
Ответ №1:
Дело в DontDestroyOnLoad
том, что в любом случае, если вы снова загрузите ту же сцену (или любую другую сцену, содержащую этот компонент), она будет запущена снова, если вы не объедините ее с шаблоном «singleton», чтобы убедиться, что всегда существует только один из этих компонентов.
Но в вашем случае вы могли бы вместо этого просто использовать static bool
(статические значения сохраняются для всего выполнения приложения)
[SerializeField] private float factor = 0.5f;
private static bool alreadySetResolution;
private void Start()
{
if(!alreadySetResolution) SetResolution();
}
private void SetResolution()
{
Screen.SetResolution(
Mathf.CeilToInt(Screen.currentResolution.width * factor),
Mathf.CeilToInt(Screen.currentResolution.height * factor),
true
);
alreadySetResolution = true;
}