【Unity之UI编程】如何用UGUI搭建一个登录注册面板

这篇具有很好参考价值的文章主要介绍了【Unity之UI编程】如何用UGUI搭建一个登录注册面板。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎


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

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏UI_Unity专栏

unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎


⭐习题总结专题篇⭐



🎶UML

unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎
unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎


🅰️ ****


🎶(1.)开始面板交互(提示面板)


unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎

  • 逻辑:没有输入账号密码按下登录的时候打开提示面板,按下确定后返回并移除面板(淡入淡出效果显示)

unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 开始面板
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
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();

        //面板数据初始化
        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("自动登录");
        }
    }
    /// <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.如果账号密码为空
                if (userName == "" || password == "")
                {
                      UIContorl.GetInstance().ChangeTipPanel("账号或密码不能为空! 请重新输入"); //显示提示面板
                }

                //2.不为空验证
                else
                {
                    PlayerData palyerData = DataContorl.GetInstance().ReadData(userName);
              
                        //验证成功
                        if (DataContorl.GetInstance().Tip(userName, password))
                        {

                            UIContorl.GetInstance().ChangeTipPanel("登录成功"); //显示提示面板

                        //记录临时数据
                        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.)开始面板交互(开关)


unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎

  • 逻辑:自动登录和记住密码之间的逻辑,取消记住密码自动登录一并取消,点击自动登录,记住密码一并勾选
 //记住密码监听
            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;

            });

🎶(3.)注册面板交互(相同账号)


  • 逻辑:注册时,存在相同账号的提示

unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎

 //确定按钮监听
        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.registerData.Add(userName, password);
                DataContorl.GetInstance().SaveData(userName, playerData);

                UIManager.GetInstance().ShowPanel<LoginPanel>("LoginPanel");
                UIContorl.GetInstance().ChangeTipPanel("注册成功请返回登录");
                UIManager.GetInstance().RemovePanel("ReginstPanel");
            }
           
            Debug.Log(Application.persistentDataPath );

        });

🎶(4.)注册面板交互(成功注册)


  • 注册成功,提示窗口,并返回登录界面

unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎



🎶(5.)数据交互方式(Json)


unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎

  • 数据管理器
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  数据管理
//___________创建者:______秩沅______
//_____________________________________
//-------------------------------------
public class DataContorl : SingleManager<DataContorl>
{
 
    /// <summary>
    /// 用Json序列化存储数据
    /// </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);
    }

    //供外部调用识别账号密码是否正确
    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; }
    }

    //供外部调用识别注册时是否有相同的账号
    public bool TipSame(string userName)
    {
        Debug.Log("该账号已注册");
       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";

        //如果不存在默认文件 就从 persistentDataPath文件夹中去寻找
        if (!File.Exists(path))
            path = Application.persistentDataPath + "/" + fileName + ".json";
        //如果读写文件夹中都还没有 那就返回一个默认对象
        if (!File.Exists(path))
            return new T();

        //进行反序列化
        string jsonStr = File.ReadAllText(path);
        //数据对象
        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 data;
    }
}


🎶(6.)数据加密Md5


unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎

  • 进入

🎶(7.)登录面板交互(成功登录)


unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎

/// <summary>
    /// 添加控件监听事件
    /// </summary>
    private void AllEvent()
    {
       
        try
        {
            //登录按钮的事件监听
            GetControl<Button>("ButtonS").onClick.AddListener(() =>
            {
                userName = GetControl<InputField>("InputAC").text;
                password = GetControl<InputField>("InputPW").text;
                //当点击登陆时
                //1.如果账号密码为空
                if (userName == "" || password == "")
                {
                      UIContorl.GetInstance().ChangeTipPanel("账号或密码不能为空! 请重新输入"); //显示提示面板
                }

                //2.不为空验证
                else
                {
                    PlayerData palyerData = DataContorl.GetInstance().ReadData(userName);
              
                        //验证成功
                        if (DataContorl.GetInstance().Tip(userName, password))
                        {

                            UIContorl.GetInstance().ChangeTipPanel("登录成功"); //显示提示面板

                        //记录临时数据
                        LoginData.GetInstance().userName  = InputAC.text;
                        LoginData.GetInstance().password  = InputPW.text;
                    }
                    else 
                        {
                            UIContorl.GetInstance().ChangeTipPanel("账号或密码错误请重新输入");
                        }


                    //记录临时数据
                    LoginData.GetInstance().userName = userName;
                    LoginData.GetInstance().password = password;
                }

            });

🎶(8.)登录面板交互(开关逻辑连带)


  • 逻辑:当点击记住密码时,下一次登录会自动显示账号和密码,当不显示时只会显示账号,当然每次的面板的临时数据都由一个单例对象LoginData进行临时保存

  • unity记住密码,显示密码,# unity实战基础,# UnityUI篇,unity,ui,游戏引擎

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:    临时记住登录面板数据
//___________创建者:  ________秩沅_______
//_____________________________________
//-------------------------------------
public class LoginData :SingleManager<LoginData>
{
    //登录数据
    //1.用户名和密码
    public string userName;
    public string password;
    //2.记住密码和自动登录
    public bool autoRP;
    public bool atoLoginl;
}

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("自动登录");
        }
    }
    /// <summary>
    /// 添加控件监听事件
    /// </summary>
    private void AllEvent()
    {
       
        try
        {
            //登录按钮的事件监听
            GetControl<Button>("ButtonS").onClick.AddListener(() =>
            {
                userName = GetControl<InputField>("InputAC").text;
                password = GetControl<InputField>("InputPW").text;
                //当点击登陆时
                //1.如果账号密码为空
                if (userName == "" || password == "")
                {
                      UIContorl.GetInstance().ChangeTipPanel("账号或密码不能为空! 请重新输入"); //显示提示面板
                }

                //2.不为空验证
                else
                {
                    PlayerData palyerData = DataContorl.GetInstance().ReadData(userName);
              
                        //验证成功
                        if (DataContorl.GetInstance().Tip(userName, password))
                        {

                            UIContorl.GetInstance().ChangeTipPanel("登录成功"); //显示提示面板

                        //记录临时数据
                        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("没有获取到");
        }


    }

⭐相关文章⭐


⭐ 软件设计师高频考点大全⭐

⭐ unity之c#专题篇—系统强基⭐



你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!文章来源地址https://www.toymoban.com/news/detail-818666.html

到了这里,关于【Unity之UI编程】如何用UGUI搭建一个登录注册面板的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity--UGUI创建基本的UI

    随着UI系统的引入,已添加了新组件,这些组件将有助于创建特定于GUI的功能。其中一些元素包括文本,图像,按钮等。在本教程中,您将学习创建和使用基本UI。 通过Unity的用户界面(UI)系统,可以控制诸如:文本,图像,按钮和其他用户控件之类的元素,这些元素将为用

    2024年04月12日
    浏览(47)
  • Unity优化之UI篇(UGUI)

            在Unity中UI优化的核心问题就是重绘和批处理之间的平衡。虽然说可以通过一些简单的技巧单方面地减少批次或者减少重绘,但进行过一波优化之后,最终还是要面临批次和重绘的平衡问题。         Canvas是UGUI的基本组件,它生成表示放置在其上的 UI 元素的网

    2024年02月04日
    浏览(39)
  • Unity UGUI事件输入,点击UI无反应

    之前被一个特别低级的UI点击问题卡了好久,记录一下,避免之后再犯同样的错误。 UI事件输入未接受到的原因无非就几个,一一排查总能找到原因。 1、若是直接使用的unity组件中的按钮,但是点击按钮没有反应。         1)查找是否被其他UI遮挡         2)查找是否接收

    2024年04月13日
    浏览(36)
  • Unity UGUI一键绑定UI控件工具(编辑器拓展)

    全为一键生成 实现自动生成代码绑定UI控件 并生成字典保存UI控件 减少自己拖拽 和手动书写过程 适用动态加载面板 建议搭配UI框架使用 根据当前选中的gameobject 查找其下方是否有对应类型的控件 有就保存到字典中 然后通过向上递归拼凑地址,然后生成到粘贴板 直接粘贴到目

    2024年04月23日
    浏览(49)
  • Unity中UI方案。IMGUI、UIElement、UGUI、NGUI

    引言         unity中有很多ui方案,各种方案有什么优势劣势,这里一一列举一下,知识扩充一下。 UI方案 适用范围 IMGUI 仅用于Editor扩展,或运行时Debug UIElement 可用于发布运行时和Editor UGUI Runtime,两大主流 UI 解决方案之一 NGUI Runtime,两大主流 UI 解决方案之一,现已较少

    2024年02月09日
    浏览(43)
  • Unity3D学习之UI系统——UGUI

    3.2.1 Screen Space -Overlay 覆盖模式 3.2.2 Screen Space - Camera 摄像机模式 创建专门的摄像机渲染UI 并让主摄像机不渲染UI层 3.2.3 World Space 宽高 * 缩放系数 = UI界面大小 参考分辨率 图片格式要改为Sprite 恒定像素模式计算公式 会根据当前分辨率 和 参考分辨率的比率自动计算UI的缩放量

    2024年02月21日
    浏览(242)
  • 【unity插件】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件

    一般的shader无法直接使用在UI上,需要在shader中定义特定的面板参数,今天就来推荐github上大佬做的一套开源的一系列UGUI,Shader实现的特效——UIEffect 为 Unity UI 提供视觉效果组件。 https://github.com/Ankh4396/UIEffect 让我们用效果来装饰你的UI!您可以根据需要从脚本和检查器中控

    2024年02月04日
    浏览(35)
  • 【unity之UI专题】—UI如此简单之UGUI六大组件(GIF思维导图详解)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity常用API 👽 ScreenSpace —overlay(覆盖模式) UI组件一直显示在屏幕前,覆盖所有 对应图示: 👽 ScreenSpace—Camera 摄像机模式 摄像机不

    2023年04月11日
    浏览(48)
  • Unity实现一个可扩展的UGUI无限滑动列表控件

    12月20日新增 增加一个可收缩的滑动列表,适用于游戏中的任务系统,成就等 使用说明 创建时需要两个模板slot,一个是button,另一个则是btn下显示的cell 配置如下图添加 ExpandableView 脚本,新增的IsDefaultExpand用来控制是否展开 11月28日新增 增加可调节的顶部间隙和左侧间隙 采

    2024年01月19日
    浏览(29)
  • 【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)

    UI设计又称界面设计,是指对软件的人机交互、操作逻辑、界面美观的整体设计,UI就相当于人可以看到的界面,并且可以对UI进行交互。 Unity  3D的UI,分为UGUI和GUI,UGUI主要是图形渲染界面,搭建方便,学习比较容易,GUI主要是代码渲染界面,需要在编写代码时就思考如何完

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包