6.服务器面板

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

×

喜欢就点赞,疼爱就打赏