8.服务器面板

  1. 8.服务器面板
    1. 8.1 拼面板
      1. 创建一个Panel取名为ServerPanel作为服务器面板,ServerPanel下创建一个image作为面板的拖拽提示面板示意图,修改透明度对着来拼。背景图后面可以做一个专门显示背景面板的预制体,先拼其他控件就行。给登录面板添加CanvasGroup组件用于淡入淡出。
      2. 创建选服按钮和上面的文字,进入游戏按钮,返回按钮
    2. 8.2 功能制作
      1. 服务器面板类图和流程图相关
      2. 创建服务器面板ServerPanel脚本,继承面板基类,注意名字要和场景中的对象一致,因为UI管理器是根据这个名字进行管理的。挂载到场景中的服务器面板上。
      3. ServerPanel脚本中声明开始游戏、切换服务器和返回按钮的公共变量btnStart、btnChange和btnBack。声明服务器名字的公共变量txtName。在外面关联。
      4. ServerPanel脚本中重写Init方法,为返回按钮添加点击事件监听,显示登录面板,隐藏当前服务器面板。为开始游戏按钮添加点击事件监听,隐藏当前服务器面板。切换场景到”GameScene”。为切换服务器按钮添加点击事件监听,隐藏当前服务器面板,显示选服面板的逻辑待补充。
      5. ServerPanel脚本中重写了ShowMe方法,调用基类ShowMe方法。其中,更新当前选择的服务器名字的逻辑待补充。之后我们会通过记录的上一次登录的服务器ID来更新内容。
      6. 登录数据LoginData脚本中,添加服务器id,用于记录玩家登录后选择的服务器id
      7. 登录面板LoginPanel脚本中的点击登录按钮监听中,如果登录成功,判断服务器id是否为-1来选择打开的选服面板或服务器面板
      8. 把服务器面板拖入Resources/UI文件夹下做成预制体
    3. 8.3 代码
      1. ServerPanel
      2. LoginPanel
      3. LoginData

8.服务器面板


8.1 拼面板

创建一个Panel取名为ServerPanel作为服务器面板,ServerPanel下创建一个image作为面板的拖拽提示面板示意图,修改透明度对着来拼。背景图后面可以做一个专门显示背景面板的预制体,先拼其他控件就行。给登录面板添加CanvasGroup组件用于淡入淡出。

创建选服按钮和上面的文字,进入游戏按钮,返回按钮


8.2 功能制作

服务器面板类图和流程图相关


创建服务器面板ServerPanel脚本,继承面板基类,注意名字要和场景中的对象一致,因为UI管理器是根据这个名字进行管理的。挂载到场景中的服务器面板上。

ServerPanel脚本中声明开始游戏、切换服务器和返回按钮的公共变量btnStart、btnChange和btnBack。声明服务器名字的公共变量txtName。在外面关联。

public Button btnStart;
public Button btnChange;
public Button btnBack;

public Text txtName;

ServerPanel脚本中重写Init方法,为返回按钮添加点击事件监听,显示登录面板,隐藏当前服务器面板。为开始游戏按钮添加点击事件监听,隐藏当前服务器面板。切换场景到”GameScene”。为切换服务器按钮添加点击事件监听,隐藏当前服务器面板,显示选服面板的逻辑待补充。

public override void Init()
{
    btnBack.onClick.AddListener(()=> {
        //显示登录面板
        UIManager.Instance.ShowPanel<LoginPanel>();
        //隐藏自己
        UIManager.Instance.HidePanel<ServerPanel>();
    });

    btnStart.onClick.AddListener(()=> {
        //进入游戏
        //由于过场景 Canvas对象不会被移除 所以 下面的面板应该也要隐藏了
        //隐藏自己
        UIManager.Instance.HidePanel<ServerPanel>();
        //切场景
        SceneManager.LoadScene("GameScene");
    });

    btnChange.onClick.AddListener(()=> {
        //显示服务器列表面板

        //隐藏自己
        UIManager.Instance.HidePanel<ServerPanel>();
    });
}

ServerPanel脚本中重写了ShowMe方法,调用基类ShowMe方法。其中,更新当前选择的服务器名字的逻辑待补充。之后我们会通过记录的上一次登录的服务器ID来更新内容。

public override void ShowMe()
{
    base.ShowMe();

    //显示自己的时候 更新 当前选择的服务器名字
    //之后 我们会通过 记录的上一次登录的服务器ID 来更新内容
}

登录数据LoginData脚本中,添加服务器id,用于记录玩家登录后选择的服务器id

/// <summary>
/// 登录界面可能需要记住的玩家操作相关数据
/// </summary>
public class LoginData
{
    //服务器相关
    //-1代表没有选择过服务器
    public int frontServerID = 0;
}

登录面板LoginPanel脚本中的点击登录按钮监听中,如果登录成功,判断服务器id是否为-1来选择打开的选服面板或服务器面板

//点击登录 做什么
btnSure.onClick.AddListener(()=> {
    //验证 用户名和密码 是否 通过
    if( LoginMgr.Instance.CheckInfo(inputUN.text, inputPW.text) )
    {
        //登录成功
        //记录数据
        ...
        //根据服务器信息 来进行判断 显示哪个面板
        if( LoginMgr.Instance.LoginData.frontServerID == -1 )
        {
            //如果从来没有选择过服务器 id为-1时  就应该直接打开 选服面板
        }
        else
        {
            //打开我们的服务器面板
            UIManager.Instance.ShowPanel<ServerPanel>();
        }
        //隐藏自己
        UIManager.Instance.HidePanel<LoginPanel>();
    }
    else
    {
        //登录失败
        UIManager.Instance.ShowPanel<TipPanel>().ChangeInfo("账号或密码错误");
    }
});

把服务器面板拖入Resources/UI文件夹下做成预制体


8.3 代码

ServerPanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class ServerPanel : BasePanel
{
    public Button btnStart;
    public Button btnChange;
    public Button btnBack;

    public Text txtName;

    public override void Init()
    {
        btnBack.onClick.AddListener(() =>
        {
            //显示登录面板
            UIManager.Instance.ShowPanel<LoginPanel>();
            //隐藏自己
            UIManager.Instance.HidePanel<ServerPanel>();
        });

        btnStart.onClick.AddListener(() =>
        {
            //进入游戏
            //由于过场景 Canvas对象不会被移除 所以 下面的面板应该也要隐藏了
            //隐藏自己
            UIManager.Instance.HidePanel<ServerPanel>();
            //切场景
            SceneManager.LoadScene("GameScene");
        });

        btnChange.onClick.AddListener(() =>
        {
            //显示服务器列表面板

            //隐藏自己
            UIManager.Instance.HidePanel<ServerPanel>();
        });
    }

    public override void ShowMe()
    {
        base.ShowMe();

        //显示自己的时候 更新 当前选择的服务器名字
        //之后 我们会通过 记录的上一次登录的服务器ID 来更新内容

    }
}

LoginPanel

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class LoginPanel : BasePanel
{
    //注册按钮
    public Button btnRegister;
    //确定登录按钮
    public Button btnSure;

    //账号和密码控件
    public InputField inputUN;
    public InputField inputPW;

    //记住密码和自动登录 多选框
    public Toggle togPW;
    public Toggle togAuto;

    public override void Init()
    {
        //点击注册 做什么
        btnRegister.onClick.AddListener(() =>
        {
            //显示注册面板
            UIManager.Instance.ShowPanel<RegisterPanel>();
            //隐藏自己
            UIManager.Instance.HidePanel<LoginPanel>();
        });

        //点击登录 做什么
        btnSure.onClick.AddListener(() =>
        {
            //点击登录后 要验证用户民密码 是否正确 

            //判断是否合法
            if (inputPW.text.Length <= 6 ||
                inputUN.text.Length <= 6)
            {
                //提示不合法 
                TipPanel panel = UIManager.Instance.ShowPanel<TipPanel>();
                //改变提示面板上提示的内容
                panel.ChangeInfo("账号和密码都必须大于6位");
                return;
            }

            //验证 用户名和密码 是否 通过
            if (LoginMgr.Instance.CheckInfo(inputUN.text, inputPW.text))
            {
                //登录成功

                //记录数据
                LoginMgr.Instance.LoginData.userName = inputUN.text;
                LoginMgr.Instance.LoginData.passWord = inputPW.text;
                LoginMgr.Instance.LoginData.rememberPw = togPW.isOn;
                LoginMgr.Instance.LoginData.autoLogin = togAuto.isOn;
                LoginMgr.Instance.SaveLoginData();

                //根据服务器信息 来进行判断 显示哪个面板
                if (LoginMgr.Instance.LoginData.frontServerID == -1)
                {
                    //如果从来没有选择过服务器 id为-1时  就应该直接打开 选服面板
                }
                else
                {
                    //打开我们的服务器面板
                    UIManager.Instance.ShowPanel<ServerPanel>();
                }

                //隐藏自己
                UIManager.Instance.HidePanel<LoginPanel>();
            }
            else
            {
                //登录失败
                UIManager.Instance.ShowPanel<TipPanel>().ChangeInfo("账号或密码错误");
            }

        });

        //点击记住密码 逻辑
        togPW.onValueChanged.AddListener((isOn) =>
        {
            //当记住密码取消选中状态时 自动登录 也应该取消选中
            if (!isOn)
            {
                togAuto.isOn = false;
            }
        });

        //点击自动登录 逻辑
        togAuto.onValueChanged.AddListener((isOn) =>
        {
            //当我们选中 自动登录时  如果记住密码 没有被选中 应该让它选中
            if (isOn)
            {
                togPW.isOn = true;
            }
        });
    }

    public override void ShowMe()
    {
        base.ShowMe();
        //显示自己时  根据数据 更新面板上的内容

        //得到数据
        LoginData loginData = LoginMgr.Instance.LoginData;

        //初始化面板显示
        //更新 两个多选框
        togPW.isOn = loginData.rememberPw;
        togAuto.isOn = loginData.autoLogin;

        //更新账号密码
        inputUN.text = loginData.userName;
        //根据你是否上一次勾选了记住密码 来决定是否 更新密码
        if (togPW.isOn)
            inputPW.text = loginData.passWord;

        //如果是自动登录 做什么
        if (togAuto.isOn)
        {
            //自动去验证账号密码相关
        }
    }


    /// <summary>
    /// 提供给外部 快捷设置用户名和密码的方法
    /// </summary>
    /// <param name="userName"></param>
    /// <param name="passWord"></param>
    public void SetInfo(string userName, string passWord)
    {
        inputUN.text = userName;
        inputPW.text = passWord;
    }
}

LoginData

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 登录界面可能需要记住的玩家操作相关数据
/// </summary>
public class LoginData
{
    //用户名
    public string userName;
    //密码
    public string passWord;

    //是否记住密码
    public bool rememberPw;
    //是否自动登录
    public bool autoLogin;

    //服务器相关
    //-1代表没有选择过服务器
    public int frontServerID = 0;
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏