关注

【Unitydemo制作】音游制作—面板的登录和注册

在这里插入图片描述


👨‍💻个人主页@元宇宙-秩沅

👨‍💻 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 );

        });

  


    }
}


🅰️


【Unityc#专题篇】之c#进阶篇】

【Unityc#专题篇】之c#核心篇】

【Unityc#专题篇】之c#基础篇】

【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


转载自CSDN-专业IT技术社区

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_64128218/article/details/139071002

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--