我对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是对我的下一个场景(仪表板场景)的引用。
答案 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()
中。因此,它被分配了每一帧。