Unity Scene的加载时间非常长

时间:2019-03-13 08:37:45

标签: c# unity3d

我对Unity还是很陌生,所以对IDE没什么兴趣。 我正在开发一个非常基本的应用程序,一个Login和一个带有一些基本UI元素的仪表板。

我遇到的问题是当我尝试切换场景时。因此,从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是对我的下一个场景(仪表板场景)的引用。

2 个答案:

答案 0 :(得分:2)

GetComponent<>()是一项耗费大量资源的任务,您不必要地调用其中的3个任务,也可以在每个帧中添加一个事件侦听器。

您应该做的是: 阅读更新,唤醒,开始的操作,然后删除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");
    }

}

答案 1 :(得分:0)

转换我的评论:侦听器已添加到Update()中,而不是添加到Start()中。因此,它被分配了每一帧。