使用Playfers存储
Unity本地持久化类Playerprefs使用详解 - PlaneZhong - 博客园 (cnblogs.com)
一、登陆界面切换
1、登陆界面的脚本(机制类脚本)
在这个UI上挂载一个脚本LoginWnd
先声明一下这个脚本,拖拽
2、在登录模块中调用
这里的lambo表达式是简化了下面的方法
这里面的回调函数,是一个机制
使用这个机制的是:EnterLogin
因此,直接用一个lambo指向被注释的方法
作用是:当每一次场景切换时,都会调用委托里面的方法
而,登陆界面只需要出现一次,所以在这个异步加载的方法中添加一个回调参数
在LoginSys中进行调用异步加载场景的方法,就实现了只出现一次登陆场景
二、Playfers存储
//登录注册界面
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
没有就自己输入
三、函数重载
先看代码
//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(), num);
}
protected void SetText(Transform trans, string context = "")
{
SetText(trans.GetComponent(), context);
}
protected void SetText(TextMeshProUGUI txt, int num = 0)
{
SetText(txt, num.ToString());
}
#endregion
}
1、文本重载
在这个文本方法中,如果输入的不是一个String类型。那么需要写一个方法包含玩家输入的类型
这里使用重载方法,很方便。
如果传入Tran类型,那就获取身上的组件,传入int/string
设置面板的失活生效也如此
此时,可以优化一下设置窗口的方法
2、注意事项
设置成Protected方法,只能被派生类继承,不能被其他方法调用
如果保护类型的虚方法,可以在子类中进行重写,也是要相同的保护类型。
四、UI基类
WindowRoot是ui加载进度的基类和登录注册界面的基类
在这里相当于调用这个单例类
在派生类中进行重写,并且继承虚方法中单例类的引用,而不用在派生类中单独声明