三、账号密码存储

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

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

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

相关推荐
FuckPatience1 小时前
C# 修改基类List中某一元素的子类类型
c#·list
玉面小君4 小时前
从 WPF 到 Avalonia 的迁移系列实战篇6:ControlTheme 和 Style区别
c#·wpf·avalonia
wanhengidc6 小时前
云手机可以息屏挂手游吗?
运维·网络·安全·游戏·智能手机
_oP_i10 小时前
WinForms 项目里生成时选择“首选目标平台 32 位导致有些电脑在获取office word对象时获取不到
c#·office
要记得喝水10 小时前
C#某公司面试题(含题目和解析)--1
开发语言·windows·面试·c#·.net
冷冷的菜哥11 小时前
ASP.NET Core文件分片上传
c#·asp.net·asp.net core·文件分片上传
wanhengidc13 小时前
云手机的空间会占用本地内存吗
科技·游戏·智能手机
上位机付工13 小时前
2025年了,学C#上位机需要什么条件
c#·上位机·西门子
c#上位机13 小时前
wpf之Border
c#·wpf