配置好相关组件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using TMPro;
public class LoginUI : MonoBehaviour
{
[Header("登录界面")]
[SerializeField] GameObject loginPanel;
[SerializeField] Button startButton;
[SerializeField] Button registerButton;
public TMP_InputField userField;
public TMP_InputField passwordField;
[Header("注册界面")]
[SerializeField] GameObject registerPanel;
public TMP_InputField registerUserField;
public TMP_InputField registerPasswordField;
public TMP_InputField registerConfirmPasswordField;
[SerializeField] Button confirmButton;
[SerializeField] Button backButton;
[Header("消息")]
[SerializeField] CanvasGroup messageGroup;
[SerializeField] TMP_Text messageText;
[SerializeField] float fadeDuration;
[Header("玩家数据")]
public List<UserData> dataList = new List<UserData>();
private void Start()
{
//按钮绑定事件 点击触发事件
startButton.onClick.AddListener(StartButtonOnClick);
registerButton.onClick.AddListener(RegisterButtonOnClick);
confirmButton.onClick.AddListener(ConfirmButtonOnClick);
backButton.onClick.AddListener(BackButtonOnClick);
dataList= LoadList();
}
private void RegisterButtonOnClick()
{
loginPanel.SetActive(false);
registerPanel.SetActive(true);
}
public void StartButtonOnClick()
{
string inputText = userField.text;
string password = passwordField.text;
bool isSucceed = false;
foreach (var data in dataList)
{
if (data.UserName == inputText)
{
if (data.UserPassword == password)
{
Debug.Log("登录成功");
StopCoroutine(MessageShowCoroutine("Success"));
StartCoroutine(MessageShowCoroutine("Success"));
//其他登录成功后的逻辑
isSucceed = true;
break;
}
}
}
if (!isSucceed)
{
Debug.Log("登录失败,没有注册");
StopCoroutine(MessageShowCoroutine("Login failed, no registration"));
StartCoroutine(MessageShowCoroutine("Login failed, no registration"));
}
}
private void ConfirmButtonOnClick()
{
string inputText = registerUserField.text;
string password = registerPasswordField.text;
string confirmPassword = registerConfirmPasswordField.text;
if (confirmPassword != password)
{
Debug.Log("密码不一致");
StopCoroutine(MessageShowCoroutine("Passwords are inconsistent"));
StartCoroutine(MessageShowCoroutine("Passwords are inconsistent"));
}
else
{
bool isExitst=false;
foreach(var Data in dataList)
{
if(Data.UserName == inputText)
{
isExitst=true;
Debug.Log("已经存在该用户");
StopCoroutine(MessageShowCoroutine("The user already exists"));
StartCoroutine(MessageShowCoroutine("The user already exists"));
break;
}
}
if(!isExitst)
{
UserData data = new UserData();
data.UserName = inputText;
data.UserPassword = password;
dataList.Add(data);
SaveList(dataList);
Debug.Log("注册成功");
StopCoroutine(MessageShowCoroutine("Registration is successful"));
StartCoroutine(MessageShowCoroutine("Registration is successful"));
}
}
}
private void BackButtonOnClick()
{
loginPanel.SetActive(true);
registerPanel.SetActive(false);
}
// 保存列表数据
public void SaveList(List<UserData> dataList)
{
// 创建包含列表数据的可序列化对象
SerializableList<UserData> serializableList = new SerializableList<UserData>(dataList);
// 将列表转换为JSON字符串
string json = JsonUtility.ToJson(serializableList);
// 定义保存文件的路径
string filePath = Application.persistentDataPath + "/UserDataList.json";
// 将JSON字符串写入文件
File.WriteAllText(filePath, json);
Debug.Log("列表已成功保存到本地文件!");
}
// 加载列表数据
public List<UserData> LoadList()
{
List<UserData> dataList = new List<UserData>();
// 定义保存文件的路径
string filePath = Application.persistentDataPath + "/UserDataList.json";
if (File.Exists(filePath))
{
// 从文件中读取JSON字符串
string json = File.ReadAllText(filePath);
// 将JSON字符串转换为列表
SerializableList<UserData> serializableList = JsonUtility.FromJson<SerializableList<UserData>>(json);
dataList = serializableList.list;
Debug.Log("列表已成功从本地文件加载!");
// 打印加载的列表项
foreach (UserData item in dataList)
{
Debug.Log("Name: " + item.UserName + ", password: " + item.UserPassword);
}
}
else
{
Debug.Log("未找到保存的列表文件!");
}
return dataList;
}
//显示消息
IEnumerator MessageShowCoroutine(string message)
{
float timer = 0f;
messageGroup.alpha=1;
messageText.text=message;
while (timer < fadeDuration)
{
timer += Time.deltaTime;
float t = timer / fadeDuration;
messageGroup.alpha = Mathf.Lerp(1f, 0f, t);
yield return null;
}
}
}
[System.Serializable]
public class UserData
{
public string UserName;
public string UserPassword;
}
[System.Serializable]
public class SerializableList<T>
{
public List<T> list;
public SerializableList(List<T> sourceList)
{
list = sourceList;
}
}
登录界面
注册界面
消息框