Время загрузки Unity очень длинное - PullRequest
1 голос
/ 13 марта 2019

Я довольно новичок в Unity, поэтому не так много опыта с IDE. Я разрабатываю довольно простое приложение, логин и панель с некоторыми базовыми элементами пользовательского интерфейса.

Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь переключать сцены. Таким образом, от LoginScene до сцены Dashboard это может занять до 20 секунд. Скрипт даже не очень логичен для запуска. На мой взгляд, это долгий путь, кто-то знает, как оптимизировать мой код, или, по крайней мере, знает, что я делаю неправильно?

Это код для проверки правильности пользователя и смены сцены.

// Start is called before the first frame update
void Start()
{
    Screen.orientation = ScreenOrientation.Portrait;
}

// Update is called once per frame
void Update()
{
    //get values from inputfields
    emailString = email.GetComponent<InputField>().text;
    passwordString = password.GetComponent<InputField>().text;

    btnLogin = login.GetComponent<Button>();
    btnLogin.onClick.AddListener(ValidateLogin);
}

private void ValidateLogin()
{
    if (emailString.Trim() == "aa" && passwordString.Trim() == "aa")
    {
        print("login succeeded!");

        SceneManager.LoadScene(1);
    }
    else
    {
        print("wrong credentials");
    }

}

Кстати: номер 1 - это ссылка на мою следующую сцену, сцену Dashboard.

Ответы [ 2 ]

2 голосов
/ 13 марта 2019

GetComponent<>() - это задача с интенсивным восстановлением ресурсов, и вы вызываете 3 из нее без необходимости, вы также добавляете прослушиватель событий в каждом кадре.

Что вы должны сделать, это: Прочтите, что делает Update, Awake, Start, затем удалите часть GetComponent<>() и используйте вместо этого свойство или поле, а также не добавляйте обработчик событий в каждый кадр.

InputField emailInputField;
InputField passwordInputField;
Button loginButton;

// Setting up the Scene
void Awake()
{
    emailInputField = email.GetComponent<Inputfield>();
    passwordInputField = password.GetComponent<InputField>();
    loginButton = login.GetComponent<Button>();

    loginButton.onClick.AddListener(ValidateLogin);
}

// Start is called before the first frame update
void Start()
{
    Screen.orientation = ScreenOrientation.Portrait;
}

// Update is called once per frame
void Update()
{
    //get values from inputfields
    emailString = emailInputField.text;
    passwordString = passwordInputField.text;
}

private void ValidateLogin()
{
    if (emailString.Trim() == "aa" && passwordString.Trim() == "aa")
    {
        print("login succeeded!");

        SceneManager.LoadScene(1);
    }
    else
    {
        print("wrong credentials");
    }

}
0 голосов
/ 13 марта 2019

Преобразование моего комментария: Слушатель был добавлен в Update(), а не в Start().Итак, он был назначен на каждый кадр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...