?????個(gè)人主頁:@元宇宙-秩沅
????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?!
????? 本文由 秩沅 原創(chuàng)
????? 收錄于專欄:UI_Unity專欄
?習(xí)題總結(jié)專題篇?
??UML
??? ****
??(1.)開始面板交互(提示面板)
- 邏輯:沒有輸入賬號(hào)密碼按下登錄的時(shí)候打開提示面板,按下確定后返回并移除面板(淡入淡出效果顯示)
-
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
//-------------------------------------
//—————————————————————————————————————
//___________項(xiàng)目: ______________
//___________功能: 開始面板
//___________創(chuàng)建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class LoginPanel : BasePanel
{
private CanvasGroup PanelGroup;
//控件
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();
//面板數(shù)據(jù)初始化
InputAC.text = LoginData.GetInstance().userName;
Toggle1.isOn = LoginData.GetInstance().autoRP;
//如果記住密碼就顯示密碼否則未空格,trycatch是防止空?qǐng)?bào)錯(cuò)
try { InputPW.text = Toggle1.isOn ? LoginData.GetInstance().password : ""; }
catch { }
Toggle2.isOn = LoginData.GetInstance().atoLoginl;
if (Toggle2.isOn)
{
Debug.Log("自動(dòng)登錄");
}
}
/// <summary>
/// 重寫隱藏方法
/// </summary>
public override void HideMe()
{
Fade(false, PanelGroup);//進(jìn)行淡出的效果
base.HideMe();
}
/// <summary>
/// 添加控件監(jiān)聽事件
/// </summary>
private void AllEvent()
{
try
{
//登錄按鈕的事件監(jiān)聽
GetControl<Button>("ButtonS").onClick.AddListener(() =>
{
userName = GetControl<InputField>("InputAC").text;
password = GetControl<InputField>("InputPW").text;
//當(dāng)點(diǎn)擊登陸時(shí)
//1.如果賬號(hào)密碼為空
if (userName == "" || password == "")
{
UIContorl.GetInstance().ChangeTipPanel("賬號(hào)或密碼不能為空! 請(qǐng)重新輸入"); //顯示提示面板
}
//2.不為空驗(yàn)證
else
{
PlayerData palyerData = DataContorl.GetInstance().ReadData(userName);
//驗(yàn)證成功
if (DataContorl.GetInstance().Tip(userName, password))
{
UIContorl.GetInstance().ChangeTipPanel("登錄成功"); //顯示提示面板
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().userName = InputAC.text;
LoginData.GetInstance().password = InputPW.text;
}
else
{
UIContorl.GetInstance().ChangeTipPanel("賬號(hào)或密碼錯(cuò)誤請(qǐng)重新輸入");
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().userName = userName;
LoginData.GetInstance().password = password;
}
});
//注冊(cè)按鈕的事件監(jiān)聽
GetControl<Button>("ButtonR").onClick.AddListener( ()=>
{
UIManager.GetInstance().ShowPanel<ReginstPanel>("ReginstPanel");//顯示注冊(cè)面板
UIManager.GetInstance().RemovePanel("LoginPanel");//隱藏登錄面板
});
//記住密碼監(jiān)聽
GetControl<Toggle>("Toggle1").onValueChanged.AddListener ((isOn)=> {
if (!isOn)
{
GetControl<Toggle>("Toggle2").isOn = false;
LoginData.GetInstance().atoLoginl = false;
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().autoRP = isOn;
});
//自動(dòng)登錄監(jiān)聽
GetControl<Toggle>("Toggle2").onValueChanged.AddListener((isOn) => {
if (isOn)
{
GetControl<Toggle>("Toggle1").isOn = true;
LoginData.GetInstance().autoRP = true;
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().atoLoginl = isOn;
});
}
catch
{
Debug.Log("沒有獲取到");
}
}
}
??(2.)開始面板交互(開關(guān))
- 邏輯:自動(dòng)登錄和記住密碼之間的邏輯,取消記住密碼自動(dòng)登錄一并取消,點(diǎn)擊自動(dòng)登錄,記住密碼一并勾選
//記住密碼監(jiān)聽
GetControl<Toggle>("Toggle1").onValueChanged.AddListener ((isOn)=> {
if (!isOn)
{
GetControl<Toggle>("Toggle2").isOn = false;
LoginData.GetInstance().atoLoginl = false;
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().autoRP = isOn;
});
//自動(dòng)登錄監(jiān)聽
GetControl<Toggle>("Toggle2").onValueChanged.AddListener((isOn) => {
if (isOn)
{
GetControl<Toggle>("Toggle1").isOn = true;
LoginData.GetInstance().autoRP = true;
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().atoLoginl = isOn;
});
??(3.)注冊(cè)面板交互(相同賬號(hào))
- 邏輯:注冊(cè)時(shí),存在相同賬號(hào)的提示
//確定按鈕監(jiān)聽
GetControl<Button>("ButtonR").onClick.AddListener(() =>
{
string userName = InputAC.text;
string password = InputPW.text;
//如果存在相同賬號(hào)名
if (DataContorl.GetInstance().TipSame (userName))
{
UIContorl.GetInstance().ChangeTipPanel("該賬號(hào)已存在!請(qǐng)重新注冊(cè)");
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("注冊(cè)成功請(qǐng)返回登錄");
UIManager.GetInstance().RemovePanel("ReginstPanel");
}
Debug.Log(Application.persistentDataPath );
});
??(4.)注冊(cè)面板交互(成功注冊(cè))
- 注冊(cè)成功,提示窗口,并返回登錄界面
??(5.)數(shù)據(jù)交互方式(Json)
- 數(shù)據(jù)管理器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________項(xiàng)目: ______________
//___________功能: 數(shù)據(jù)管理
//___________創(chuàng)建者:______秩沅______
//_____________________________________
//-------------------------------------
public class DataContorl : SingleManager<DataContorl>
{
/// <summary>
/// 用Json序列化存儲(chǔ)數(shù)據(jù)
/// </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);
}
//供外部調(diào)用識(shí)別賬號(hào)密碼是否正確
public bool Tip(string userName, string password)
{
try
{
string pass = ReadData(userName).registerData[userName];
Debug.Log(pass);
if (userName != null && pass == password)
{
return true;
}
else return false;
}
catch
{ return false; }
}
//供外部調(diào)用識(shí)別注冊(cè)時(shí)是否有相同的賬號(hào)
public bool TipSame(string userName)
{
Debug.Log("該賬號(hào)已注冊(cè)");
return ReadData(userName).registerData.ContainsKey(userName);
}
}
- Json管理器
using LitJson;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public enum JsonType
{
JsonUtlity,
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()
{
//先判斷 是否存在streamingAssets中
string path = Application.streamingAssetsPath + "/" + fileName + ".json";
//如果不存在默認(rèn)文件 就從 persistentDataPath文件夾中去尋找
if (!File.Exists(path))
path = Application.persistentDataPath + "/" + fileName + ".json";
//如果讀寫文件夾中都還沒有 那就返回一個(gè)默認(rèn)對(duì)象
if (!File.Exists(path))
return new T();
//進(jìn)行反序列化
string jsonStr = File.ReadAllText(path);
//數(shù)據(jù)對(duì)象
T data = default(T);
switch (type)
{
case JsonType.JsonUtlity:
data = JsonUtility.FromJson<T>(jsonStr);
break;
case JsonType.LitJson:
data = JsonMapper.ToObject<T>(jsonStr);
break;
}
//把對(duì)象返回出去
return data;
}
}
??(6.)數(shù)據(jù)加密Md5
- 進(jìn)入
??(7.)登錄面板交互(成功登錄)
/// <summary>
/// 添加控件監(jiān)聽事件
/// </summary>
private void AllEvent()
{
try
{
//登錄按鈕的事件監(jiān)聽
GetControl<Button>("ButtonS").onClick.AddListener(() =>
{
userName = GetControl<InputField>("InputAC").text;
password = GetControl<InputField>("InputPW").text;
//當(dāng)點(diǎn)擊登陸時(shí)
//1.如果賬號(hào)密碼為空
if (userName == "" || password == "")
{
UIContorl.GetInstance().ChangeTipPanel("賬號(hào)或密碼不能為空! 請(qǐng)重新輸入"); //顯示提示面板
}
//2.不為空驗(yàn)證
else
{
PlayerData palyerData = DataContorl.GetInstance().ReadData(userName);
//驗(yàn)證成功
if (DataContorl.GetInstance().Tip(userName, password))
{
UIContorl.GetInstance().ChangeTipPanel("登錄成功"); //顯示提示面板
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().userName = InputAC.text;
LoginData.GetInstance().password = InputPW.text;
}
else
{
UIContorl.GetInstance().ChangeTipPanel("賬號(hào)或密碼錯(cuò)誤請(qǐng)重新輸入");
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().userName = userName;
LoginData.GetInstance().password = password;
}
});
??(8.)登錄面板交互(開關(guān)邏輯連帶)
-
邏輯:當(dāng)點(diǎn)擊記住密碼時(shí),下一次登錄會(huì)自動(dòng)顯示賬號(hào)和密碼,當(dāng)不顯示時(shí)只會(huì)顯示賬號(hào),當(dāng)然每次的面板的臨時(shí)數(shù)據(jù)都由一個(gè)單例對(duì)象LoginData進(jìn)行臨時(shí)保存
-
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________項(xiàng)目: ______________
//___________功能: 臨時(shí)記住登錄面板數(shù)據(jù)
//___________創(chuàng)建者: ________秩沅_______
//_____________________________________
//-------------------------------------
public class LoginData :SingleManager<LoginData>
{
//登錄數(shù)據(jù)
//1.用戶名和密碼
public string userName;
public string password;
//2.記住密碼和自動(dòng)登錄
public bool autoRP;
public bool atoLoginl;
}
public override void ShowMe()
{
Fade(true , PanelGroup);
base.ShowMe();
//面板數(shù)據(jù)初始化
InputAC.text = LoginData.GetInstance().userName;
Toggle1.isOn = LoginData.GetInstance().autoRP;
//如果記住密碼就顯示密碼否則未空格,trycatch是防止空?qǐng)?bào)錯(cuò)
try { InputPW.text = Toggle1.isOn ? LoginData.GetInstance().password : ""; }
catch { }
Toggle2.isOn = LoginData.GetInstance().atoLoginl;
if (Toggle2.isOn)
{
Debug.Log("自動(dòng)登錄");
}
}
/// <summary>
/// 添加控件監(jiān)聽事件
/// </summary>
private void AllEvent()
{
try
{
//登錄按鈕的事件監(jiān)聽
GetControl<Button>("ButtonS").onClick.AddListener(() =>
{
userName = GetControl<InputField>("InputAC").text;
password = GetControl<InputField>("InputPW").text;
//當(dāng)點(diǎn)擊登陸時(shí)
//1.如果賬號(hào)密碼為空
if (userName == "" || password == "")
{
UIContorl.GetInstance().ChangeTipPanel("賬號(hào)或密碼不能為空! 請(qǐng)重新輸入"); //顯示提示面板
}
//2.不為空驗(yàn)證
else
{
PlayerData palyerData = DataContorl.GetInstance().ReadData(userName);
//驗(yàn)證成功
if (DataContorl.GetInstance().Tip(userName, password))
{
UIContorl.GetInstance().ChangeTipPanel("登錄成功"); //顯示提示面板
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().userName = InputAC.text;
LoginData.GetInstance().password = InputPW.text;
}
else
{
UIContorl.GetInstance().ChangeTipPanel("賬號(hào)或密碼錯(cuò)誤請(qǐng)重新輸入");
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().userName = userName;
LoginData.GetInstance().password = password;
}
});
//注冊(cè)按鈕的事件監(jiān)聽
GetControl<Button>("ButtonR").onClick.AddListener( ()=>
{
UIManager.GetInstance().ShowPanel<ReginstPanel>("ReginstPanel");//顯示注冊(cè)面板
UIManager.GetInstance().RemovePanel("LoginPanel");//隱藏登錄面板
});
//記住密碼監(jiān)聽
GetControl<Toggle>("Toggle1").onValueChanged.AddListener ((isOn)=> {
if (!isOn)
{
GetControl<Toggle>("Toggle2").isOn = false;
LoginData.GetInstance().atoLoginl = false;
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().autoRP = isOn;
});
//自動(dòng)登錄監(jiān)聽
GetControl<Toggle>("Toggle2").onValueChanged.AddListener((isOn) => {
if (isOn)
{
GetControl<Toggle>("Toggle1").isOn = true;
LoginData.GetInstance().autoRP = true;
}
//記錄臨時(shí)數(shù)據(jù)
LoginData.GetInstance().atoLoginl = isOn;
});
}
catch
{
Debug.Log("沒有獲取到");
}
}
?相關(guān)文章?
? 軟件設(shè)計(jì)師高頻考點(diǎn)大全?
? unity之c#專題篇—系統(tǒng)強(qiáng)基?文章來源:http://www.zghlxwxcb.cn/news/detail-818666.html
你們的點(diǎn)贊?? 收藏? 留言?? 關(guān)注?是我持續(xù)創(chuàng)作,輸出優(yōu)質(zhì)內(nèi)容的最大動(dòng)力!文章來源地址http://www.zghlxwxcb.cn/news/detail-818666.html
到了這里,關(guān)于【Unity之UI編程】如何用UGUI搭建一個(gè)登錄注冊(cè)面板的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!