👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 专栏交流 | 🧧 |
---|---|
🟥✨Unity100个实战基础✨🟥 | 🎁 |
🟦✨ Unity100个精华一记✨🟦 | 🎁 |
🟩✨ Unity50个demo案例教程✨🟩 | 🎁 |
🟨✨ Unity100个精华细节BUG✨🟨 | 🎁 |
⭐前言⭐
🎶 逻辑梳理
- 1.采用单例模式构造的UIManager脚本,对所有面板类Panel进行管理
①加载预制体。Canvas和所有面板都以预制体的方式进行异步加载
②构建层级。并构建显示层级(Bot,Mid,Top,System) ,方便面板之间的显隐
③提供面板显示、隐藏、移除和 自定义事件添加的方法
🎶(1) 登录面板逻辑
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 开始面板
//___________创建者:
//_____________________________________
//-------------------------------------
public class LoginPanel : BasePanel
{
private CanvasGroup PanelGroup;
//当前登录成功的玩家数据
private PlayerData palyerData;
//控件
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();
//面板数据初始化
InputAC.text = LoginData.GetInstance().userName;
Toggle1.isOn = LoginData.GetInstance().autoRP;
//如果记住密码就显示密码否则未空格,trycatch是防止空报错
try
{
InputPW.text = Toggle1.isOn ? LoginData.GetInstance().password :"";
}
catch { }
Toggle2.isOn = LoginData.GetInstance().atoLoginl;
if (Toggle2.isOn) //如果勾选了自动登录
{
Debug.Log("逻辑待添加");
InputPW.text = LoginData.GetInstance().password;
}
}
/// <summary>
/// 重写隐藏方法
/// </summary>
public override void HideMe()
{
Fade(false, PanelGroup);//进行淡出的效果
base.HideMe();
}
/// <summary>
/// 添加控件监听事件
/// </summary>
private void AllEvent()
{
try
{
//登录按钮的事件监听
GetControl<Button>("ButtonS").onClick.AddListener(() =>
{
userName = GetControl<InputField>("InputAC").text;
password = GetControl<InputField>("InputPW").text;
//当点击登陆时
//1.如果账号密码为空
Debug.Log ("此时密码为"+ password);
if (userName == "" || password == "" || userName ==null || password== null )
{
UIContorl.GetInstance().ChangeTipPanel("账号或密码不能为空! 请重新输入"); //显示提示面板
}
//2.不为空验证
else
{
palyerData = DataContorl.GetInstance().ReadData(userName);
//验证成功
if (DataContorl.GetInstance().Tip(userName, password))
{
DataContorl.GetInstance().foreverPalyerdata = palyerData; //将数据中正确的玩家信息导入数据类中的全局成员
UIManager.GetInstance().RemovePanel("LoginPanel");//移除登录面板
UIManager.GetInstance().RemovePanel("BKPanel");//移除背景面板
UIManager.GetInstance().ShowPanel <SelectPanel>("SelectPanel"); //加载模式选择面板
//记录临时数据
LoginData.GetInstance().userName = InputAC.text;
LoginData.GetInstance().password = InputPW.text;
}
else
{
UIContorl.GetInstance().ChangeTipPanel("账号或密码错误请重新输入");
}
//记录临时数据
LoginData.GetInstance().userName = userName;
LoginData.GetInstance().password = password;
}
});
//注册按钮的事件监听
GetControl<Button>("ButtonR").onClick.AddListener( ()=>
{
UIManager.GetInstance().ShowPanel<ReginstPanel>("ReginstPanel");//显示注册面板
UIManager.GetInstance().RemovePanel("LoginPanel");//隐藏登录面板
});
//记住密码监听
GetControl<Toggle>("Toggle1").onValueChanged.AddListener ((isOn)=> {
if (!isOn)
{
GetControl<Toggle>("Toggle2").isOn = false;
LoginData.GetInstance().atoLoginl = false;
}
//记录临时数据
LoginData.GetInstance().autoRP = isOn;
});
//自动登录监听
GetControl<Toggle>("Toggle2").onValueChanged.AddListener((isOn) => {
if (isOn)
{
GetControl<Toggle>("Toggle1").isOn = true;
LoginData.GetInstance().autoRP = true;
}
//记录临时数据
LoginData.GetInstance().atoLoginl = isOn;
});
}
catch
{
Debug.Log("没有获取到");
}
}
}
🎶(2) 注册面板逻辑
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//-------------------------------------
//—————————————————————————————————————
//___________项目: ______________
//___________功能: 注册面板
//___________创建者:
//_____________________________________
//-------------------------------------
public class ReginstPanel : BasePanel
{
private CanvasGroup PanelGroup;
private InputField InputAC, InputPW;
protected override void Awake()
{
base.Awake();
PanelGroup = GetComponent<CanvasGroup>();
if (!PanelGroup)
{
PanelGroup = gameObject.AddComponent<CanvasGroup>();
}
InputAC = GetControl<InputField>("InputAC");
InputPW = GetControl<InputField>("InputPW");
}
private void Start()
{
AllEvent();
}
public override void HideMe()
{
Fade(false, PanelGroup);
base.HideMe();
}
/// <summary>
/// 添加控件监听事件
/// </summary>
private void AllEvent()
{
//取消按钮监听
GetControl<Button>("ButtonS").onClick.AddListener(()=>
{
UIManager.GetInstance().RemovePanel("ReginstPanel"); //尽量用移除不要用隐藏因为隐藏不会删除字典中的面板
UIManager.GetInstance().ShowPanel<LoginPanel>("LoginPanel"); //显示登录面板
});
//确定按钮监听
GetControl<Button>("ButtonR").onClick.AddListener(() =>
{
string userName = InputAC.text;
string password = InputPW.text;
//如果存在相同账号名
if (DataContorl.GetInstance().TipSame (userName))
{
UIContorl.GetInstance().ChangeTipPanel("该账号已存在!请重新注册");
InputAC.text = "";
InputPW.text = "";
}
else
{
PlayerData playerData = new PlayerData();
playerData.userName = userName;
playerData.password = password;
DataContorl.GetInstance().SaveData(userName, playerData);//注册信息存盘
acountContorller.GetInstance().SaveData(JsonManager.Instance.LoadData<AcountData >("acountArrary"),userName); //一直存用户账号
UIManager.GetInstance().ShowPanel<LoginPanel>("LoginPanel");
UIContorl.GetInstance().ChangeTipPanel("注册成功请返回登录");
UIManager.GetInstance().RemovePanel("ReginstPanel");
}
Debug.Log(Application.persistentDataPath );
});
}
}
⭐🅰️⭐
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、
转载自CSDN-专业IT技术社区
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_64128218/article/details/139071002