三、账号密码存储

使用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加载进度的基类和登录注册界面的基类

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

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

相关推荐
程序设计实验室4 小时前
C# 扩展方法只会写 this 吗?C# 14 新语法直接把扩展方法玩出了花
c#
唐青枫7 小时前
C#.NET SignalR 深入解析:实时通信、Hub 与连接管理实战
c#·.net
唐宋元明清218813 小时前
.NET Win32磁盘动态卷/跨区卷触发“函数不正确”问题排查
windows·c#·存储
hez201013 小时前
Satori GC:同时做到高吞吐、低延时和低内存占用
c#·.net·.net core·gc·clr
唐青枫1 天前
C#.NET Channel 深入解析:高性能异步生产者消费者模型实战
c#·.net
小峥降临2 天前
Rokid UXR 的手势追踪虚拟中更真实的手实战开发【含 工程源码 和 最终完成APK】
c#
晨星shine6 天前
GC、Dispose、Unmanaged Resource 和 Managed Resource
后端·c#
用户298698530146 天前
.NET 文档自动化:Spire.Doc 设置奇偶页页眉/页脚的最佳实践
后端·c#·.net
用户3667462526746 天前
接口文档汇总 - 2.设备状态管理
c#
用户3667462526746 天前
接口文档汇总 - 3.PLC通信管理
c#