?Personal homepage: @元 Universe-志慅
hallo Welcome Like Collection? Leave a message Add follow?!
This article is originally written by Zhiyuan
Included in the column:UI_Unity column
?Exercise Summary Special Topic?
Article directory
-
- ?Exercise Summary Special Topic?
- UML
- (==1.==)Start panel interaction (prompt panel)
- (==2.==)Start panel interaction (switch)
- (==3.==)Registration panel interaction (same account)
- (==4.==)Registration panel interaction (successful registration)
- (==5.==)Data interaction method (Json)
- (==6.==)Data encryption Md5
- (==7.==)Login panel interaction (successful login)
- (==8.==)Login panel interaction (switch logic connection)
- ?related articles?
UML
?****
(1.)Start panel interaction (prompt panel)
- Logic: Open the prompt panel when pressing login without entering the account password. After pressing OK, return and remove the panel (displayed with fade-in and fade-out effect)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; //------------------------------------- //---------------------------------- //___________project: ______________ //___________ Function: Start panel //___________Creator: Zhiyuan_______________ //____________________________ //------------------------------------- public class LoginPanel : BasePanel {<!-- --> private CanvasGroup PanelGroup; //Control InputField InputAC, InputPW; Toggle Toggle1 ,Toggle2; string userName, password; protected override void Awake() {<!-- --> base.Awake(); PanelGroup = GetComponent<CanvasGroup>(); if (!PanelGroup) {<!-- --> PanelGroup = gameObject.AddComponent<CanvasGroup>(); } InputAC = GetControl<InputField>("InputAC"); InputPW = GetControl<InputField>("InputPW"); Toggle1 = GetControl<Toggle>("Toggle1"); Toggle2 = GetControl<Toggle>("Toggle2"); userName = InputAC.text; password = InputPW.text; } private void Start() {<!-- --> AllEvent(); } public override void ShowMe() {<!-- --> Fade(true, PanelGroup); base.ShowMe(); //Panel data initialization InputAC.text = LoginData.GetInstance().userName; Toggle1.isOn = LoginData.GetInstance().autoRP; //If you remember the password, display the password otherwise there is no space. Trycatch is to prevent empty errors. try {<!-- --> InputPW.text = Toggle1.isOn ? LoginData.GetInstance().password : ""; } catch {<!-- --> } Toggle2.isOn = LoginData.GetInstance().atoLoginl; if (Toggle2.isOn) {<!-- --> Debug.Log("Automatic login"); } } /// <summary> /// Override hidden methods /// </summary> public override void HideMe() {<!-- --> Fade(false, PanelGroup);//Fade out effect base.HideMe(); } /// <summary> /// Add controls to listen for events /// </summary> private void AllEvent() {<!-- --> try {<!-- --> //Event listening for the login button GetControl<Button>("ButtonS").onClick.AddListener(() => {<!-- --> userName = GetControl<InputField>("InputAC").text; password = GetControl<InputField>("InputPW").text; //When click to log in //1. If the account password is empty if (userName == "" || password == "") {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Account or password cannot be empty! Please re-enter"); //Display prompt panel } //2. Not empty verification else {<!-- --> PlayerData palyerData = DataContorl.GetInstance().ReadData(userName); //verification successful if (DataContorl.GetInstance().Tip(userName, password)) {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Login successful"); //Display prompt panel //Record temporary data LoginData.GetInstance().userName = InputAC.text; LoginData.GetInstance().password = InputPW.text; } else {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Account or password is wrong, please re-enter"); } //Record temporary data LoginData.GetInstance().userName = userName; LoginData.GetInstance().password = password; } }); //Register event listener for button GetControl<Button>("ButtonR").onClick.AddListener( ()=> {<!-- --> UIManager.GetInstance().ShowPanel<ReginstPanel>("ReginstPanel");//Show the registration panel UIManager.GetInstance().RemovePanel("LoginPanel");//Hide the login panel }); //Remember password monitoring GetControl<Toggle>("Toggle1").onValueChanged.AddListener ((isOn)=> {<!-- --> if (!isOn) {<!-- --> GetControl<Toggle>("Toggle2").isOn = false; LoginData.GetInstance().atoLoginl = false; } //Record temporary data LoginData.GetInstance().autoRP = isOn; }); //Automatic login monitoring GetControl<Toggle>("Toggle2").onValueChanged.AddListener((isOn) => {<!-- --> if(isOn) {<!-- --> GetControl<Toggle>("Toggle1").isOn = true; LoginData.GetInstance().autoRP = true; } //Record temporary data LoginData.GetInstance().atoLoginl = isOn; }); } catch {<!-- --> Debug.Log("Not obtained"); } } }
(2.)Start panel interaction (switch)
- Logic: The logic between automatic login and remember password. If you cancel remember password, automatic login will be cancelled. Click Automatic login and remember password will be checked.
//Remember password monitoring GetControl<Toggle>("Toggle1").onValueChanged.AddListener ((isOn)=> {<!-- --> if (!isOn) {<!-- --> GetControl<Toggle>("Toggle2").isOn = false; LoginData.GetInstance().atoLoginl = false; } //Record temporary data LoginData.GetInstance().autoRP = isOn; }); //Automatic login monitoring GetControl<Toggle>("Toggle2").onValueChanged.AddListener((isOn) => {<!-- --> if(isOn) {<!-- --> GetControl<Toggle>("Toggle1").isOn = true; LoginData.GetInstance().autoRP = true; } //Record temporary data LoginData.GetInstance().atoLoginl = isOn; });
(3.)Registration panel interaction (same account)
- Logic: When registering, there is a prompt for the same account
//OK button monitoring GetControl<Button>("ButtonR").onClick.AddListener(() => {<!-- --> string userName = InputAC.text; string password = InputPW.text; //If the same account name exists if (DataContorl.GetInstance().TipSame (userName)) {<!-- --> UIContorl.GetInstance().ChangeTipPanel("This account already exists! Please register again"); InputAC.text = ""; InputPW.text = ""; } else {<!-- --> PlayerData playerData = new PlayerData(); playerData.registerData.Add(userName, password); DataContorl.GetInstance().SaveData(userName, playerData); UIManager.GetInstance().ShowPanel<LoginPanel>("LoginPanel"); UIContorl.GetInstance().ChangeTipPanel("Registration successful, please return to login"); UIManager.GetInstance().RemovePanel("ReginstPanel"); } Debug.Log(Application.persistentDataPath); });
(4.)Registration panel interaction (successful registration)
- Registration is successful, prompt window, and return to the login interface
(5.)Data interaction method (Json)
- data manager
using System.Collections; using System.Collections.Generic; using UnityEngine; //------------------------------------- //---------------------------------- //___________project: ______________ //___________ Function: Data Management //___________Creator:______Zhiyuan______ //____________________________ //------------------------------------- public class DataContorl : SingleManager<DataContorl> {<!-- --> /// <summary> /// Use Json serialization to store data /// </summary> /// <param name="name"></param> public void SaveData(string name, PlayerData data) {<!-- --> JsonManager.Instance.SaveData(data, name); } public PlayerData ReadData(string name) {<!-- --> return JsonManager.Instance.LoadData<PlayerData>(name); } //For external calls to identify whether the account password is correct public bool Tip(string userName, string password) {<!-- --> try {<!-- --> string pass = ReadData(userName).registerData[userName]; Debug.Log(pass); if (userName != null & amp; & amp; pass == password) {<!-- --> return true; } else return false; } catch {<!-- --> return false; } } //For external calls to identify whether there is the same account when registering public bool TipSame(string userName) {<!-- --> Debug.Log("This account has been registered"); return ReadData(userName).registerData.ContainsKey(userName); } }
- Json manager
using LitJson; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; public enum JsonType {<!-- --> JsonUtility, LitJson, } public class JsonManager {<!-- --> private static JsonManager instance = new JsonManager(); public static JsonManager Instance => instance; private JsonManager() {<!-- --> } public void SaveData(object data, string fileName, JsonType type = JsonType.LitJson) {<!-- --> string path = Application.persistentDataPath + "/" + fileName + ".json"; string jsonStr = ""; switch (type) {<!-- --> case JsonType.JsonUtlity: jsonStr = JsonUtility.ToJson(data); break; case JsonType.LitJson: jsonStr = JsonMapper.ToJson(data); break; } File.WriteAllText(path, jsonStr); } public T LoadData<T>(string fileName, JsonType type = JsonType.LitJson) where T : new() {<!-- --> //First determine whether it exists in streamingAssets string path = Application.streamingAssetsPath + "/" + fileName + ".json"; //If the default file does not exist, search for it from the persistentDataPath folder. if (!File.Exists(path)) path = Application.persistentDataPath + "/" + fileName + ".json"; //If there is no read-write folder yet, return a default object if (!File.Exists(path)) return new T(); //Deserialize string jsonStr = File.ReadAllText(path); //data object T data = default(T); switch (type) {<!-- --> case JsonType.JsonUtlity: data = JsonUtility.FromJson<T>(jsonStr); break; case JsonType.LitJson: data = JsonMapper.ToObject<T>(jsonStr); break; } //Return the object return data; } }
(6.)Data encryption Md5
- Enter
(7.)Login panel interaction (successful login)
/// <summary> /// Add controls to listen for events /// </summary> private void AllEvent() {<!-- --> try {<!-- --> //Event listening for the login button GetControl<Button>("ButtonS").onClick.AddListener(() => {<!-- --> userName = GetControl<InputField>("InputAC").text; password = GetControl<InputField>("InputPW").text; //When click to log in //1. If the account password is empty if (userName == "" || password == "") {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Account or password cannot be empty! Please re-enter"); //Display prompt panel } //2. Not empty verification else {<!-- --> PlayerData palyerData = DataContorl.GetInstance().ReadData(userName); //verification successful if (DataContorl.GetInstance().Tip(userName, password)) {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Login successful"); //Display prompt panel //Record temporary data LoginData.GetInstance().userName = InputAC.text; LoginData.GetInstance().password = InputPW.text; } else {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Account or password is wrong, please re-enter"); } //Record temporary data LoginData.GetInstance().userName = userName; LoginData.GetInstance().password = password; } });
(8.)Login panel interaction (switch logic connection)
-
Logic: When you click Remember Password, the account and password will be automatically displayed the next time you log in. When not displayed, only the account will be displayed. Of course, the temporary data of each panel is temporarily saved by a singleton object LoginData.
using System.Collections; using System.Collections.Generic; using UnityEngine; //------------------------------------- //---------------------------------- //___________project: ______________ //___________ Function: Temporarily remember login panel data //___________Created by: ________zhiyuan_______ //____________________________ //------------------------------------- public class LoginData :SingleManager<LoginData> {<!-- --> //Login data //1.Username and password public string userName; public string password; //2. Remember password and automatic login public bool autoRP; public bool atoLoginl; }
public override void ShowMe() {<!-- --> Fade(true, PanelGroup); base.ShowMe(); //Panel data initialization InputAC.text = LoginData.GetInstance().userName; Toggle1.isOn = LoginData.GetInstance().autoRP; //If you remember the password, display the password otherwise there is no space. Trycatch is to prevent empty errors. try {<!-- --> InputPW.text = Toggle1.isOn ? LoginData.GetInstance().password : ""; } catch {<!-- --> } Toggle2.isOn = LoginData.GetInstance().atoLoginl; if (Toggle2.isOn) {<!-- --> Debug.Log("Automatic login"); } }
/// <summary> /// Add controls to listen for events /// </summary> private void AllEvent() {<!-- --> try {<!-- --> //Event listening for the login button GetControl<Button>("ButtonS").onClick.AddListener(() => {<!-- --> userName = GetControl<InputField>("InputAC").text; password = GetControl<InputField>("InputPW").text; //When click to log in //1. If the account password is empty if (userName == "" || password == "") {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Account or password cannot be empty! Please re-enter"); //Display prompt panel } //2. Not empty verification else {<!-- --> PlayerData palyerData = DataContorl.GetInstance().ReadData(userName); //verification successful if (DataContorl.GetInstance().Tip(userName, password)) {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Login successful"); //Display prompt panel //Record temporary data LoginData.GetInstance().userName = InputAC.text; LoginData.GetInstance().password = InputPW.text; } else {<!-- --> UIContorl.GetInstance().ChangeTipPanel("Account or password is wrong, please re-enter"); } //Record temporary data LoginData.GetInstance().userName = userName; LoginData.GetInstance().password = password; } }); //Register event listener for button GetControl
?Related articles?
? A complete collection of high-frequency test points for software designers?
? Unity’s C# Special Topic – System Strong Foundation?
Your likes Favorites? Comments Follow? are the biggest motivation for me to continue to create and output high-quality content!