英文:
Why isn't a Unity Canvas loading?
问题
我尝试将它更改为Canvas,但它仍然无法跳转到下一个场景/画布。
我已经在构建设置中添加了RoomList
,但仍然无法跳转到那里。
它未达到StartCoroutine(LoadNextSceneWithDelay(3f)); Debug.Log("登录成功。");
部分。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine;
using TMPro;
using Firebase;
using Firebase.Database;
public class LoginScript : MonoBehaviour {
public TMP_InputField idInput;
public TMP_InputField passwordInput;
public Button visibilityButton;
public Button loginButton;
private bool isPasswordVisible = false;
private Firebase.Database.DatabaseReference databaseReference;
private void Start() {
// 设置Firebase数据库连接
databaseReference =
Firebase.Database.FirebaseDatabase.DefaultInstance.RootReference;
loginButton.onClick.AddListener(OnLoginButtonClick);
visibilityButton.onClick.AddListener(OnVisibilityButtonClick);
}
public void OnLoginButtonClick() {
string id = idInput.text;
string password = passwordInput.text;
// 检查ID和密码是否为空
if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(password)) {
Debug.Log("请输入您的ID和密码");
return;
}
// 检查ID是否为空
if (string.IsNullOrEmpty(id)) {
Debug.Log("请输入您的ID");
return;
}
// 检查密码是否为空
if (string.IsNullOrEmpty(password)) {
Debug.Log("请输入您的密码");
return;
}
// 检查是否连接到Firebase数据库
if (Application.internetReachability != NetworkReachability.NotReachable) {
Debug.Log("已连接到Firebase数据库");
} else {
Debug.Log("未连接到Firebase数据库");
}
try {
// 查询数据库以获取用户名和密码
DatabaseReference usersRef =
databaseReference.Child("Users").Child("Monitoring");
usersRef.GetValueAsync().ContinueWith(task => {
if (task.IsFaulted) {
Debug.LogError("从Firebase数据库检索数据时出错:" +
task.Exception);
return;
}
DataSnapshot snapshot = task.Result;
bool idFound = false;
bool passwordMatched = false;
foreach (DataSnapshot userSnapshot in snapshot.Children) {
string storedID = userSnapshot.Value.ToString();
string storedPassword = userSnapshot.Value.ToString();
if (storedID == id) {
idFound = true;
if (storedPassword == password) {
passwordMatched = true;
break;
}
}
}
// 检查结果并加载场景或显示调试消息
if (idFound && passwordMatched) {
StartCoroutine(LoadNextSceneWithDelay(3f));
Debug.Log("登录成功。");
} else {
if (!idFound) {
Debug.Log("用户名不正确");
}
if (!passwordMatched) {
Debug.Log("密码不正确");
}
}
});
} catch (Exception ex) {
Debug.LogError("OnLoginButtonClick中出现异常:" + ex.Message);
}
}
private IEnumerator LoadNextSceneWithDelay(float delay) {
yield return new WaitForSeconds(delay);
SceneManager.LoadScene("RoomList");
}
public void OnVisibilityButtonClick() {
isPasswordVisible = !isPasswordVisible;
UpdatePasswordVisibility();
}
private void UpdatePasswordVisibility() {
if (isPasswordVisible) {
passwordInput.contentType = TMP_InputField.ContentType.Standard;
passwordInput.ForceLabelUpdate();
} else {
passwordInput.contentType = TMP_InputField.ContentType.Password;
passwordInput.ForceLabelUpdate();
}
}
}
英文:
I tried to change it to Canvas, but it's still not going to the next scene/canvas.
I already added the RoomList
in the building settings but still not going there.
It's not reaching the StartCoroutine(LoadNextSceneWithDelay(3f)); Debug.Log("Login successful.");
part.
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityEngine;
using TMPro;
using Firebase;
using Firebase.Database;
public class LoginScript : MonoBehaviour {
public TMP_InputField idInput;
public TMP_InputField passwordInput;
public Button visibilityButton;
public Button loginButton;
private bool isPasswordVisible = false;
private Firebase.Database.DatabaseReference databaseReference;
private void Start() {
// Set up the Firebase database connection
databaseReference =
Firebase.Database.FirebaseDatabase.DefaultInstance.RootReference;
loginButton.onClick.AddListener(OnLoginButtonClick);
visibilityButton.onClick.AddListener(OnVisibilityButtonClick);
}
public void OnLoginButtonClick() {
string id = idInput.text;
string password = passwordInput.text;
// Check if ID and password are empty
if (string.IsNullOrEmpty(id) && string.IsNullOrEmpty(password)) {
Debug.Log("Please enter your ID and password");
return;
}
// Check if ID is empty
if (string.IsNullOrEmpty(id)) {
Debug.Log("Please enter your ID");
return;
}
// Check if password is empty
if (string.IsNullOrEmpty(password)) {
Debug.Log("Please enter your password");
return;
}
// Check if connected to the Firebase database
if (Application.internetReachability != NetworkReachability.NotReachable) {
Debug.Log("Connected to Firebase database");
} else {
Debug.Log("Not connected to Firebase database");
}
try {
// Query the database for the username and password
DatabaseReference usersRef =
databaseReference.Child("Users").Child("Monitoring");
usersRef.GetValueAsync().ContinueWith(task => {
if (task.IsFaulted) {
Debug.LogError("Error retrieving data from Firebase database: " +
task.Exception);
return;
}
DataSnapshot snapshot = task.Result;
bool idFound = false;
bool passwordMatched = false;
foreach (DataSnapshot userSnapshot in snapshot.Children) {
string storedID = userSnapshot.Value.ToString();
string storedPassword = userSnapshot.Value.ToString();
if (storedID == id) {
idFound = true;
if (storedPassword == password) {
passwordMatched = true;
break;
}
}
}
// Check the results and load the scene or display debug messages
if (idFound && passwordMatched) {
StartCoroutine(LoadNextSceneWithDelay(3f));
Debug.Log("Login successful.");
} else {
if (!idFound) {
Debug.Log("Incorrect username");
}
if (!passwordMatched) {
Debug.Log("Incorrect password");
}
}
});
} catch (Exception ex) {
Debug.LogError("Exception in OnLoginButtonClick: " + ex.Message);
}
}
private IEnumerator LoadNextSceneWithDelay(float delay) {
yield return new WaitForSeconds(delay);
SceneManager.LoadScene("RoomList");
}
public void OnVisibilityButtonClick() {
isPasswordVisible = !isPasswordVisible;
UpdatePasswordVisibility();
}
private void UpdatePasswordVisibility() {
if (isPasswordVisible) {
passwordInput.contentType = TMP_InputField.ContentType.Standard;
passwordInput.ForceLabelUpdate();
} else {
passwordInput.contentType = TMP_InputField.ContentType.Password;
passwordInput.ForceLabelUpdate();
}
}
}
答案1
得分: 1
First check that the Scene has been added to the Scenes in Build.
其次,您的foreach
循环应该检查用户名和密码是否匹配单个条目,并且在错误输出中不要提供哪部分不正确,因为这有助于恶意操作者尝试暴力破解帐户。
bool loginSuccess = false;
foreach (DataSnapshot userSnapshot in snapshot.Children) {
string storedID = userSnapshot.Value.ToString();
string storedPassword = userSnapshot.Value.ToString();
if (storedID == id && storedPassword == password) {
loginSuccess = true;
break;
}
}
if(loginSuccess)
{
//加载下一个场景
}
else
{
Debug.Log("用户信息不正确");
}
英文:
First check that the Scene has been added to the Scenes in Build.
Secondly your foreach
loop should check that the username and password matches a single entry and in the error output don't put which part was incorrect as that assists bad actors trying to bruteforce accounts.
bool loginSuccess = false;
foreach (DataSnapshot userSnapshot in snapshot.Children) {
string storedID = userSnapshot.Value.ToString();
string storedPassword = userSnapshot.Value.ToString();
if (storedID == id && storedPassword == password) {
loginSuccess = true;
break;
}
}
if(loginSuccess)
{
//Load next scene
}
else
{
Debug.Log("Incorrect user details");
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论