using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using System.Text.RegularExpressions; using DG.Tweening; public class LoginMgr : MonoBehaviour { [SerializeField] GameObject loginView; [SerializeField] GameObject registerView; [SerializeField] GameObject forgetPWD_View; [SerializeField] GameObject loginMode1; [SerializeField] GameObject loginMode2; [SerializeField] Sprite[] loginModeSprites; [SerializeField] GameObject loginInUser; [SerializeField] GameObject loginInPWD; [SerializeField] GameObject loginInPhone; [SerializeField] GameObject loginInCode; [SerializeField] GameObject loginValidTime; [SerializeField] GameObject registerInUser; [SerializeField] GameObject registerInPWD1; [SerializeField] GameObject registerInPWD2; [SerializeField] GameObject registerInNickname; [SerializeField] GameObject registerInGender; [SerializeField] Text loginTip; [SerializeField] Text registerTip; public static UserInfo myUserInfo = new UserInfo(); int loginMode = 1; void Start() { SelectLoginMode(1); GameObject[] inputNodes = {loginInUser, loginInPWD, registerInUser, registerInPWD1, registerInPWD2}; foreach (var inputNode in inputNodes) { InputField inputField = GetInputField(inputNode); inputField.onValueChanged.AddListener(delegate(string text) { Match match = new Regex("[^A-Za-z0-9]").Match(text); if (match.Success) { inputField.text = text.Replace(match.Value, ""); } }); } GetInputField(loginInUser).text = PlayerPrefs.GetString("LoginRecord_User", ""); GetInputField(loginInPWD).text = PlayerPrefs.GetString("LoginRecord_PWD", ""); } InputField GetInputField(GameObject inputNode) { return inputNode.transform.Find("InputField").GetComponent(); } public void SelectLoginMode(int mode) { loginMode = mode; if (loginMode == 1) { loginMode1.GetComponent().sprite = loginModeSprites[0]; loginMode2.GetComponent().sprite = loginModeSprites[3]; loginInUser.SetActive(true); loginInPWD.SetActive(true); loginInPhone.SetActive(false); loginInCode.SetActive(false); loginValidTime.SetActive(false); } else if (loginMode == 2) { loginMode1.GetComponent().sprite = loginModeSprites[1]; loginMode2.GetComponent().sprite = loginModeSprites[2]; loginInUser.SetActive(false); loginInPWD.SetActive(false); loginInPhone.SetActive(true); loginInCode.SetActive(true); loginValidTime.SetActive(true); } loginTip.text = ""; } public void showRegisterView() { loginView.SetActive(false); registerView.SetActive(true); forgetPWD_View.SetActive(false); registerTip.text = ""; } public void showLoginView() { loginView.SetActive(true); registerView.SetActive(false); forgetPWD_View.SetActive(false); loginTip.text = ""; } public void showForgetPWD_View() { loginView.SetActive(false); registerView.SetActive(false); forgetPWD_View.SetActive(true); } public void login() { InputField user = GetInputField(loginInUser); if (user.text.Trim().Length == 0) { loginTip.color = Color.yellow; loginTip.text = "请输入用户名"; return; } InputField pwd = GetInputField(loginInPWD); if (pwd.text.Trim().Length == 0) { loginTip.color = Color.yellow; loginTip.text = "请输入密码"; return; } UserInfos userInfos = GetUserInfos(); foreach (var userInfo in userInfos.list) { if (userInfo.user == user.text) { if (userInfo.pwd == pwd.text) { loginTip.color = Color.green; loginTip.text = "登录成功"; myUserInfo = userInfo; PlayerPrefs.SetString("LoginRecord_User", userInfo.user); PlayerPrefs.SetString("LoginRecord_PWD", userInfo.pwd); SceneManager.LoadScene("Home", LoadSceneMode.Single); } else { loginTip.color = Color.red; loginTip.text = "密码错误"; } return; } } loginTip.color = Color.yellow; loginTip.text = "该用户尚未注册"; } public void Register() { InputField user = GetInputField(registerInUser); if (user.text.Length < 6) { registerTip.color = Color.red; registerTip.text = "用户名长度至少6位"; return; } InputField pwd1 = GetInputField(registerInPWD1); if (pwd1.text.Length < 6) { registerTip.color = Color.red; registerTip.text = "密码长度至少6位"; return; } InputField pwd2 = GetInputField(registerInPWD2); if (pwd1.text != pwd2.text) { registerTip.color = Color.red; registerTip.text = "两次输入的密码不一致"; return; } InputField nickname = GetInputField(registerInNickname); if (nickname.text.Trim().Length == 0) { registerTip.color = Color.yellow; registerTip.text = "请输入游戏昵称"; return; } UserInfos userInfos = GetUserInfos(); foreach (var userInfo in userInfos.list) { if (userInfo.user == user.text) { registerTip.color = Color.yellow; registerTip.text = "该用户无法重复注册"; return; } } UserInfo userInfo1 = new UserInfo(); userInfo1.user = user.text; userInfo1.pwd = pwd1.text; userInfo1.nickname = nickname.text; Transform toggleGroup = registerInGender.transform.Find("ToggleGroup"); for (int i = 0; i < toggleGroup.childCount; i++) { if (toggleGroup.GetChild(i).GetComponent().isOn) { userInfo1.gender = i == 0 ? "男" : "女"; break; } } userInfos.list.Add(userInfo1); SetUserInfos(userInfos); registerTip.color = Color.green; registerTip.text = "注册成功"; //自动跳转到登录并填写登录信息 GetInputField(loginInUser).text = userInfo1.user; GetInputField(loginInPWD).text = userInfo1.pwd; SelectLoginMode(1); Invoke("showLoginView", 0.5f); } public static UserInfos GetUserInfos() { string userInfosStr = PlayerPrefs.GetString("UserInfos", ""); return userInfosStr.Length == 0 ? new UserInfos(): JsonUtility.FromJson(userInfosStr); } public static void SetUserInfos(UserInfos userInfos) { PlayerPrefs.SetString("UserInfos", JsonUtility.ToJson(userInfos)); } public static void SaveUserInfo(UserInfo userInfo) { UserInfos userInfos = GetUserInfos(); for(int i = 0; i < userInfos.list.Count; i++) { UserInfo u = userInfos.list[i]; if (u.user == userInfo.user) { userInfos.list[i] = userInfo; } } SetUserInfos(userInfos); myUserInfo = userInfo; } } public class UserInfos { public List list = new List(); } [Serializable] public class UserInfo { public string user = ""; public string pwd = ""; public string nickname = ""; public string phone = ""; public string gender = ""; public string birthday = ""; public string national = ""; public string region = ""; }