三、账号密码存储

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

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

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

相关推荐
c#上位机6 小时前
C#上位机项目实战——Task.Run执行带参数的方法
c#·上位机
林川~017 小时前
Unity新输入系统使用笔记
unity·input system
Lost of 程序猿12 小时前
用 YARP 为 .NET 微服务搭一座“立交桥“:路由转发与生产配置实践
c#·asp.net
小贺儿开发15 小时前
Unity 结合百度AI开放平台 手写文字识别
人工智能·科技·学习·unity·云服务·文字识别·手写文字
点纭15 小时前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#
用户7884773163416 小时前
用 .NET MAUI 一套 C# 同时出 Windows 和 Android:哪些是真能共享,哪些是 marketing
c#
Lost of 程序猿17 小时前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net
goujunwe18 小时前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
林川~011 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
He BianGu1 天前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster