6.服务器面板
6.1 拼面板
创建一个Panel取名为ServerPanel,ServerPanel下创建一个Texture作为面板的底图,拖拽服务器面板示意图,对着来拼
按套路创建一个当前服背景sprite,当前服Label,换区按钮,进入游戏按钮,返回按钮。添加必要的脚本和碰撞器,调整适配
检查DrawCall,发现动态文字穿插层级会导致多次DrawCall。修改所有文字层级高一点。减少DrawCall。
6.2 功能制作
分析可知,服务器面板可以不涉及数据相关,数据相关放到选服面板。服务器关联自身面板上的组件添加监听事件就行。
创建服务器面板ServerPanel脚本,添加面板中的控件变量,在Inspector窗口关联。添加换区和开始游戏按钮的监听,有些还不能做的操作写上注释。重写显示自己的操作。之后显示自己时会更新服务器信息Label。
//服务器面板
public class ServerPanel : BasePanel<ServerPanel>
{
//服务器信息
public UILabel labInfo;
//换区按钮
public UIButton btnChange;
//开始游戏按钮
public UIButton btnBegin;
public override void Init()
{
//换区按钮监听
btnChange.onClick.Add(new EventDelegate(()=> {
//打开服务区选择面板
//隐藏自己
HideMe();
}));
//开始游戏按钮监听
btnBegin.onClick.Add(new EventDelegate(()=> {
//进去游戏 场景切换
SceneManager.LoadScene("GameScene");
}));
//一开始隐藏自己
HideMe();
}
public override void ShowMe()
{
base.ShowMe();
//之后再这里更新 服务器信息label显示的服务器信息即可
}
}
在登录面板登录按钮监听中,如果玩家之前选择过服务器 ,直接打开服务器面板,如果没有选择过服务器,那就打开服务器选择面板,选服面板之后再做。
//登录面板登录按钮监听
btnLogin.onClick.Add(new EventDelegate(() => {
//点击登录做啥
//判断 找好和密码 是否合法
//合法 做什么
if( LoginMgr.Instance.CheckInfo(inputUserName.value, inputPassWord.value) )
{
//记录用户名
LoginMgr.Instance.LoginData.userName = inputUserName.value;
LoginMgr.Instance.LoginData.passWord = inputPassWord.value;
LoginMgr.Instance.LoginData.rememberPW = togRemeber.value;
LoginMgr.Instance.LoginData.autoLogin = togAutoLogin.value;
LoginMgr.Instance.SaveLoginData();
//隐藏自己 显示 服务器相关面板
//如果玩家之前选择过服务器
//直接打开服务器面板
ServerPanel.Instance.ShowMe();
//如果没有选择过服务器 那就打开服务器选择面板
HideMe();
}
//不合法做什么
else
{
TipPanel.Instance.ShowMe();
TipPanel.Instance.ChangeInfo("账号或密码错误");
}
}));
6.3 代码
ServerPanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
//服务器面板
public class ServerPanel : BasePanel<ServerPanel>
{
//服务器信息
public UILabel labInfo;
//换区按钮
public UIButton btnChange;
//开始游戏按钮
public UIButton btnBegin;
public override void Init()
{
//换区按钮监听
btnChange.onClick.Add(new EventDelegate(() =>
{
//打开服务区选择面板
//隐藏自己
HideMe();
}));
//开始游戏按钮监听
btnBegin.onClick.Add(new EventDelegate(() =>
{
//进去游戏 场景切换
SceneManager.LoadScene("GameScene");
}));
//一开始隐藏自己
HideMe();
}
public override void ShowMe()
{
base.ShowMe();
//之后再这里更新 服务器信息label显示的服务器信息即可
}
}
LoginPanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoginPanel : BasePanel<LoginPanel>
{
//账号和密码输入框
public UIInput inputUserName;
public UIInput inputPassWord;
//注册和登录 两个按钮
public UIButton btnRegister;
public UIButton btnLogin;
//记住密码和自动登录 两个tog
public UIToggle togRemeber;
public UIToggle togAutoLogin;
public override void Init()
{
#region 处理控件 事件监听相关逻辑
btnRegister.onClick.Add(new EventDelegate(() => {
//点击注册做啥
//隐藏自己 显示 注册面板
HideMe();
//显示注册面板
RegisterPanel.Instance.ShowMe();
}));
//登录面板登录按钮监听
btnLogin.onClick.Add(new EventDelegate(() => {
//点击登录做啥
//判断 找好和密码 是否合法
//合法 做什么
if (LoginMgr.Instance.CheckInfo(inputUserName.value, inputPassWord.value))
{
//记录用户名
LoginMgr.Instance.LoginData.userName = inputUserName.value;
LoginMgr.Instance.LoginData.passWord = inputPassWord.value;
LoginMgr.Instance.LoginData.rememberPW = togRemeber.value;
LoginMgr.Instance.LoginData.autoLogin = togAutoLogin.value;
LoginMgr.Instance.SaveLoginData();
//隐藏自己 显示 服务器相关面板
//如果玩家之前选择过服务器
//直接打开服务器面板
ServerPanel.Instance.ShowMe();
//如果没有选择过服务器 那就打开服务器选择面板
HideMe();
}
//不合法做什么
else
{
TipPanel.Instance.ShowMe();
TipPanel.Instance.ChangeInfo("账号或密码错误");
}
}));
togRemeber.onChange.Add(new EventDelegate(() => {
//记住密码 单选框 选中未选中 状态变化 逻辑处理
//记录数据
//如果记住密码没有选中
if (!togRemeber.value)
{
//强制让自动登录也没有选中
togAutoLogin.value = false;
}
}));
togAutoLogin.onChange.Add(new EventDelegate(() => {
//自动登录 单选框 选中未选中 状态变化 逻辑处理
//记录数据
//如果自动登录选中了 那么记住密码 应该强制选中
if (togAutoLogin.value)
{
togRemeber.value = true;
}
}));
#endregion
#region 初始化面板显示的相关信息
//更新登录面板相关的内容 我们需要数据来进行更新
//获取我们的 登录数据 更新面板上的显示
LoginData data = LoginMgr.Instance.LoginData;
//更新 两个Tog
togRemeber.value = data.rememberPW;
togAutoLogin.value = data.autoLogin;
//更新用户名
if (data.userName != "")
inputUserName.value = data.userName;
//是否更新密码
if (data.rememberPW)
{
inputPassWord.value = data.passWord;
}
//是否自动登录
if (data.autoLogin)
{
//自动登录的逻辑
}
#endregion
}
//提供给外部使用的 快捷设置 登录面板 账号和密码的方法 主要提供个注册面板
public void SetInfo(string userName, string passWord)
{
inputUserName.value = userName;
inputPassWord.value = passWord;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com