使用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<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加载进度的基类和登录注册界面的基类
在这里相当于调用这个单例类
在派生类中进行重写,并且继承虚方法中单例类的引用,而不用在派生类中单独声明