三、账号密码存储

使用Playfers存储

Unity本地持久化类Playerprefs使用详解 - PlaneZhong - 博客园 (cnblogs.com)

一、登陆界面切换

1、登陆界面的脚本(机制类脚本)

在这个UI上挂载一个脚本LoginWnd

先声明一下这个脚本,拖拽

2、在登录模块中调用

这里的lambo表达式是简化了下面的方法

这里面的回调函数,是一个机制

使用这个机制的是:EnterLogin

因此,直接用一个lambo指向被注释的方法

作用是:当每一次场景切换时,都会调用委托里面的方法

而,登陆界面只需要出现一次,所以在这个异步加载的方法中添加一个回调参数

在LoginSys中进行调用异步加载场景的方法,就实现了只出现一次登陆场景

二、Playfers存储

cs 复制代码
//登录注册界面
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class LoginWnd : MonoBehaviour
{
	public TMP_InputField iptAcct;
	public TMP_InputField iptPass;
	public Button btnEnter;
	public Button btnNotice;
   public void InitWnd()
	{
		//获取本地存储的账号密码
		if (PlayerPrefs.HasKey("Acct") && PlayerPrefs.HasKey("Pass"))//如果查到了账号和密码
		{
			//赋值给它
			iptAcct.text = PlayerPrefs.GetString("Acct");
			iptPass.text = PlayerPrefs.GetString("Pass");
		}
		else//没有就自己输入
		{
			iptAcct.text = "";
			iptPass.text = "";
		}
	}
	//TODO更新本地存储的账号密码

}

在这个代码中,和之前一样,需要进行一个初始化

被LoginSys调用。

如果查询到了账号和密码,那么就赋值给text

没有就自己输入

三、函数重载

先看代码

cs 复制代码
//UI界面基类
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class WindowRoot : MonoBehaviour
{
    public ResSvc resSvc = null;
    public void SetWndState(bool isActive=true)//这个窗口默认打开
    {
        //判断当前的状态是否等于目标状态
        //如果不等于目标状态,那就设置为目标状态
        if (gameObject.activeSelf != isActive)
        {
            SetActive(gameObject, isActive);
           // gameObject.SetActive(isActive);
        }//如果是当前的状态,那么初始化/不是就给一个清理的函数
        if (isActive)
        {
            InitWnd();
        }
        else
        {
            ClearWnd();
        }
    }
    protected virtual void InitWnd()
    {
        resSvc = ResSvc.Instance;
    }
    protected virtual void ClearWnd()
    {
        resSvc = null;
    }

	#region 重载方法
    protected void SetActive(GameObject go,bool isActive=true)
    {
        go.SetActive(isActive);
    }
	protected void SetActive(Transform trans, bool state = true)
	{
		trans.gameObject.SetActive(state);
	}
    protected void SetActive(RectTransform rectTrans, bool state = true)
	{
		rectTrans.gameObject.SetActive(state);
	}
    protected void SetActive(Image img, bool state = true)
	{
		img.transform.gameObject.SetActive(state);
	}
    protected void SetActive(TextMeshProUGUI txt, bool state = true)
	{
		txt.transform.gameObject.SetActive(state);
	}


	protected void SetText(TextMeshProUGUI txt,string context="")
    {
        txt.text = context;
    }
    protected void SetText(Transform trans, int num = 0)
    {
        SetText(trans.GetComponent<TextMeshProUGUI>(), num);
	}
    protected void SetText(Transform trans, string context = "")
	{
		SetText(trans.GetComponent<TextMeshProUGUI>(), context);
	}
	protected void SetText(TextMeshProUGUI txt, int num = 0)
	{
		SetText(txt, num.ToString());
	}
	#endregion
}

1、文本重载

在这个文本方法中,如果输入的不是一个String类型。那么需要写一个方法包含玩家输入的类型

这里使用重载方法,很方便。

如果传入Tran类型,那就获取身上的组件,传入int/string

设置面板的失活生效也如此

此时,可以优化一下设置窗口的方法

2、注意事项

设置成Protected方法,只能被派生类继承,不能被其他方法调用

如果保护类型的虚方法,可以在子类中进行重写,也是要相同的保护类型。

四、UI基类

WindowRoot是ui加载进度的基类和登录注册界面的基类

在这里相当于调用这个单例类

在派生类中进行重写,并且继承虚方法中单例类的引用,而不用在派生类中单独声明

相关推荐
周杰伦fans1 小时前
C# required 关键字详解
开发语言·网络·c#
黄思搏1 小时前
基于标注平台数据的 Unity UI 自动化构建工作流设计与工程实践
ui·unity·蓝湖·vectoui
游乐码3 小时前
c#ArrayList
开发语言·c#
唐青枫4 小时前
C#.NET Monitor 与 Mutex 深入解析:进程内同步、跨进程互斥与使用边界
c#·.net
周杰伦fans5 小时前
cad文件选项卡不见了怎么办?
c#
llm大模型算法工程师weng5 小时前
Python敏感词检测方案详解
开发语言·python·c#
AI_零食5 小时前
Flutter 框架跨平台鸿蒙开发 - 社交断舍离应用
运维·服务器·学习·flutter·游戏·开源·harmonyos
游乐码6 小时前
c#stack
开发语言·c#
雷焰财经6 小时前
首都在线MaaS平台:打造企业级AI中枢,驱动游戏产业智变
大数据·人工智能·游戏
wanhengidc6 小时前
云手机 热血传奇游戏挂机
服务器·网络·安全·游戏·智能手机