4.登录面板
4.1 拼面板
创建登录背景面板,只包含一个登录背景
创建一个复选按钮,为之后的记住密码复选框和自动登录复选框使用
创建账号密码背景文本输入文本。创建记住密码自动登录复选按钮。创建注册和确定按钮。检测关联
可以和提示面板一样添加显示隐藏的动效。
发布资源和代码
4.2 功能制作
创建背景面板脚本。继承Window。重新初始化方法对窗口内容进行复制并全屏显示。
public class LoginBkWindow : Window
{
protected override void OnInit()
{
base.OnInit();
this.contentPane = UIManager.Instance.LoadComponent("Login", "LoginBKWindow");
this.contentPane.MakeFullScreen();
}
}
创建登录面板脚本。继承Window。
public class LoginWindow : Window
{
}
登录面板脚本添加播放动画相关方法
protected override void DoShowAnimation()
{
this.contentPane.GetTransition("show").Play(base.DoShowAnimation);
}
protected override void DoHideAnimation()
{
this.contentPane.GetTransition("hide").Play(base.DoHideAnimation);
}
创建登录数据结构类。包含用户名、密码、是否记住密码、是否自动登录、上一次登录服务器。添加可序列化特性,让之后可以在二进制数据管理器中使用。
/// <summary>
/// 登录数据结构类
/// </summary>
[System.Serializable]
public class LoginData
{
//用户名
public string userName;
//密码
public string passWord;
//是否记住密码
public bool rememberPw;
//是否自动登录
public bool autoLogin;
//上一次登录的服务器ID
public int frontServerID = 0;
}
创建用于管理登录相关数据的管理器类。搞成单例。引用一个登录数据对象。构造函数初始化用二进制管理器加载登录数据。如果本地不存在登录数据对象,则创建一个新的登录数据对象。添加存储登录数据二进制文件到本地的方法。
/// <summary>
/// 用于管理登录相关数据的管理器
/// </summary>
public class LoginMgr
{
private static LoginMgr instance = new LoginMgr();
// 登录数据对象
public LoginData loginData;
public static LoginMgr Instance => instance;
private LoginMgr()
{
// 加载本地存储的登录数据对象
loginData = BinaryDataMgr.Instance.Load<LoginData>("LoginData");
// 如果本地不存在登录数据对象,则创建一个新的登录数据对象
if (loginData == null)
loginData = new LoginData();
}
/// <summary>
/// 存储登录数据二进制文件到本地
/// </summary>
public void SaveLoginData()
{
BinaryDataMgr.Instance.Save(loginData, "LoginData");
}
}
在登录面板重写显示时会自动调用的方法。通过 LoginMgr.Instance.loginData 获取登录相关的数据。把窗口的内容转成FGUI生成的组件类 UI_LoginWindow,通过 UI_LoginWindow 组件拓展类对象 panel,可以使用该类提供的属性和方法来访问登录窗口的各个组件。将登录相关的数据分别赋值给登录窗口的相应组件,例如是否记住密码、是否自动登录以及账号密码的显示内容。自动登录的逻辑之后完成了注册功能再回过头来写。
/// <summary>
/// 显示时会自动调用的方法
/// </summary>
protected override void OnShown()
{
base.OnShown();
// 初始化面板基础内容
// 得到登录相关数据
LoginData data = LoginMgr.Instance.loginData;
// 得到组件拓展类对象
UI_LoginWindow panel = this.contentPane as UI_LoginWindow;
// 两个复选按钮是否选中
panel.m_cbPW.selected = data.rememberPw;
panel.m_cbAuto.selected = data.autoLogin;
// 账号密码显示的内容
panel.m_inputAN.text = data.userName;
panel.m_inputPW.text = data.passWord;
// 如果需要自动登录
if (data.autoLogin)
{
// 之后完成了注册功能再回过头来写自动登录
}
}
在登录面板重写初始化方法。在方法中加载登录窗口的UI组件,并将其设置为全屏显示。把contentPane转成UI_LoginWindow 组件拓展类对象 panel,可以使用该类提供的属性和方法来访问登录窗口的各个组件。设置确定按钮的点击事件逻辑。当点击确定按钮时,会判断输入的账号和密码是否合法(账号长度大于6位,密码长度大于3位),若不合法则弹出提示窗口,否则执行用户名和密码的验证逻辑(待完成)。设置注册按钮的点击事件逻辑。当点击注册按钮时,显示注册面板(待完成),并隐藏当前登录面板。设置记住密码复选框状态改变时的逻辑。当取消勾选记住密码时,同时强制取消勾选自动登录复选框。设置自动登录复选框状态改变时的逻辑。当勾选自动登录时,同时强制勾选记住密码复选框。
protected override void OnInit()
{
base.OnInit();
// 加载登录窗口的UI组件,并将其设置为全屏显示
this.contentPane = UIManager.Instance.LoadComponent("Login", "LoginWindow");
this.contentPane.MakeFullScreen();
// 得到组件拓展类对象
UI_LoginWindow panel = this.contentPane as UI_LoginWindow;
// 确定按钮点击后的逻辑
panel.m_btnSure.onClick.Add(() =>
{
// 判断输入内容的合法性
if (panel.m_inputAN.text.Length <= 6 || panel.m_inputPW.text.Length <= 3)
{
UIManager.Instance.ShowWindow<TipWindow>().ChangeInfo("账号必须大于6位,密码必须大于3位");
return;
}
// 验证用户名和密码是否输入正确
// 之后完成了注册功能再回过头来写
});
// 注册按钮点击后的逻辑
panel.m_btnRe.onClick.Add(() =>
{
// 显示注册面板
// 隐藏自己
UIManager.Instance.HideWindow<LoginWindow>();
});
// 当记住密码状态改变时的逻辑
panel.m_cbPW.onChanged.Add(() =>
{
// 记住密码取消勾选时强行取消勾选自动登录
if (!panel.m_cbPW.selected)
panel.m_cbAuto.selected = false;
});
// 当自动登录时的逻辑
panel.m_cbAuto.onChanged.Add(() =>
{
// 自动登录勾选上强行勾选上记住密码
if (panel.m_cbAuto.selected)
panel.m_cbPW.selected = true;
});
}
在主脚本进行测试。
UIManager.Instance.ShowWindow<LoginBkWindow>();
UIManager.Instance.ShowWindow<LoginWindow>();
4.3 代码
LoginBkWindow
using FairyGUI;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoginBkWindow : Window
{
protected override void OnInit()
{
base.OnInit();
this.contentPane = UIManager.Instance.LoadComponent("Login", "LoginBKWindow");
this.contentPane.MakeFullScreen();
}
}
LoginData
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 登录数据结构类
/// </summary>
[System.Serializable]
public class LoginData
{
//用户名
public string userName;
//密码
public string passWord;
//是否记住密码
public bool rememberPw;
//是否自动登录
public bool autoLogin;
//上一次登录的服务器ID
public int frontServerID = 0;
}
LoginMgr
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 用于管理登录相关数据的管理器
/// </summary>
public class LoginMgr
{
private static LoginMgr instance = new LoginMgr();
// 登录数据对象
public LoginData loginData;
public static LoginMgr Instance => instance;
private LoginMgr()
{
// 加载本地存储的登录数据对象
loginData = BinaryDataMgr.Instance.Load<LoginData>("LoginData");
// 如果本地不存在登录数据对象,则创建一个新的登录数据对象
if (loginData == null)
loginData = new LoginData();
}
/// <summary>
/// 存储登录数据二进制文件到本地
/// </summary>
public void SaveLoginData()
{
BinaryDataMgr.Instance.Save(loginData, "LoginData");
}
}
LoginWindow
using FairyGUI;
using Login;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoginWindow : Window
{
protected override void OnInit()
{
base.OnInit();
// 加载登录窗口的UI组件,并将其设置为全屏显示
this.contentPane = UIManager.Instance.LoadComponent("Login", "LoginWindow");
this.contentPane.MakeFullScreen();
// 得到组件拓展类对象
UI_LoginWindow panel = this.contentPane as UI_LoginWindow;
// 确定按钮点击后的逻辑
panel.m_btnSure.onClick.Add(() =>
{
// 判断输入内容的合法性
if (panel.m_inputAN.text.Length <= 6 || panel.m_inputPW.text.Length <= 3)
{
UIManager.Instance.ShowWindow<TipWindow>().ChangeInfo("账号必须大于6位,密码必须大于3位");
return;
}
// 验证用户名和密码是否输入正确
// 之后完成了注册功能再回过头来写
});
// 注册按钮点击后的逻辑
panel.m_btnRe.onClick.Add(() =>
{
// 显示注册面板
// 隐藏自己
UIManager.Instance.HideWindow<LoginWindow>();
});
// 当记住密码状态改变时的逻辑
panel.m_cbPW.onChanged.Add(() =>
{
// 记住密码取消勾选时强行取消勾选自动登录
if (!panel.m_cbPW.selected)
panel.m_cbAuto.selected = false;
});
// 当自动登录时的逻辑
panel.m_cbAuto.onChanged.Add(() =>
{
// 自动登录勾选上强行勾选上记住密码
if (panel.m_cbAuto.selected)
panel.m_cbPW.selected = true;
});
}
/// <summary>
/// 显示时会自动调用的方法
/// </summary>
protected override void OnShown()
{
base.OnShown();
// 初始化面板基础内容
// 得到登录相关数据
LoginData data = LoginMgr.Instance.loginData;
// 得到组件拓展类对象
UI_LoginWindow panel = this.contentPane as UI_LoginWindow;
// 两个复选按钮是否选中
panel.m_cbPW.selected = data.rememberPw;
panel.m_cbAuto.selected = data.autoLogin;
// 账号密码显示的内容
panel.m_inputAN.text = data.userName;
panel.m_inputPW.text = data.passWord;
// 如果需要自动登录
if (data.autoLogin)
{
// 之后完成了注册功能再回过头来写自动登录
}
}
protected override void DoShowAnimation()
{
this.contentPane.GetTransition("show").Play(base.DoShowAnimation);
}
protected override void DoHideAnimation()
{
this.contentPane.GetTransition("hide").Play(base.DoHideAnimation);
}
}
Main
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Main : MonoBehaviour
{
void Start()
{
//TipWindow win = UIManager.Instance.ShowWindow<TipWindow>();
//win.ChangeInfo("欢迎进入游戏");
//显示登录背景面板
UIManager.Instance.ShowWindow<LoginBkWindow>();
UIManager.Instance.ShowWindow<LoginWindow>();
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com