zoukankan      html  css  js  c++  java
  • Netty游戏服务器之五Unity3d登陆消息

    今天我们来讲客户端Unity和服务器收发消息的具体过程。

    首先,我们要在unity上搭建登陆界面的UI,这里呢,我用的是NGUI插件。

    相信做过unity3d前端的都对这个非常的熟悉,最近官方的UGUI也非常的火,但是毕竟是刚出来的,有些功能还不够完善。我期待UGUI干翻NGUI的那天。

    算了,不意淫了。这里我不详细的讲怎么搭建UI,我只是走个过场,讲下重点的。

    这里有三个重要的gameobject,分别是userInput(账号输入框),passInput(密码输入框),加上BtnLogin(开始游戏按钮),其他自己搭建很快的

    这里我讲下思路,就是输入账号和密码后,点击开始游戏按钮,客户端就会发送一条消息给服务器,

    然后服务器收到消息,读取里面的账号密码去数据库验证是否存在该用户或密码是否正确,

    如果正确就发送成功的消息给客户端,客户端就可以加载其他场景了。(这里只是我个人的思路,可能有很多不好的地方,需要你们大神的指正)

    ok,我们来写发送消息额机制,不得说ngui的事件监听写的太牛了。而且我最近向一个大神学了一个ui的底层框架,用起来就更加得心应手了。

    public class Protocol{
    	public const int  TYPE_LOGIN = 0;
    
    	public const int TYPE_USER = 1;
    
    	public const int TYPE_WIZARD = 2;
    	
    	public const int TYPE_BATTLE = 3;
    }
    

      

    public class LoginProtocol {
    	public const int Area_LoginRequest = 0; // 请求登陆
    	public const int Area_LoginResponse = 1; //登陆响应
    
    	public const int Login_InvalidMessage = 0;//无效消息
    	public const int Login_InvalidUsername = 1;//无效用户名
    	public const int Login_InvalidPassword = 2;//密码错误
    	
    	public const int Login_Succeed = 10;//登陆成功
    }
    

      

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    public class LoginUI : SceneBase {
    
    	#region 界面加载相关
    	protected override void OnInitFront()
    	{
    		base.OnInitFront();
    		_type = SceneType.LoginUI;
    	}
    	protected override void OnInitSkinFront()
    	{
    		base.OnInitSkinFront();
    		SetMainSkinPath("UI/Login/LoginUI");
    	}
    	protected override void OnInitDone()
    	{
    		base.OnInitDone();
    		InitData();
    	}
    	protected override void OnDestroyDone()
    	{
    		base.OnDestroyDone();
    		
    	}
    	protected override void OnDestroyFront()
    	{
    		base.OnDestroyFront();
    	}
    	protected override void OnClick(GameObject target)
    	{
    		base.OnClick(target);
    		ButtonClick(target);
    	}
    	
    	public override void OnInit(params object[] sceneArgs)
    	{
    		base.OnInit(sceneArgs);
    	}
    	public override void OnShowed()
    	{
    		base.OnShowed();
    		
    	}
    	#endregion
    	
    	#region 数据定义
    	
    	private UIInput UserInput;
    	private UIInput PassInput;
    	
    	#endregion
    	
    	#region ui逻辑
    	
    	void InitData()
    	{
    		UserInput = skinTransform.Find("UserInput").GetComponent<UIInput>();//获得相关组件
    		PassInput = skinTransform.Find("PassInput").GetComponent<UIInput>();
    		if (PlayerPrefs.GetString("Username") != null && PlayerPrefs.GetString("Username") != "")
    		{
    			UserInput.value = PlayerPrefs.GetString("Username");
    		}
    	}
    	
    	void ButtonClick(GameObject click)//按钮监听
    	{
    		if(click.name.Equals("BtnLogin"))//如果是登录按钮
    		{
    			if (UserInput.value == "")//账号为空什么都不做
    			{
    				return ;
    			}
    			else if (PassInput.value == "")//密码为空什么都不做
    			{
    				return ;
    			}
    			else
    			{
    				SocketModel LoginRequset = new SocketModel();
    				LoginRequset.SetType(Protocol.TYPE_LOGIN);//消息的类型为Login
    				LoginRequset.SetArea(LoginProtocol.Area_LoginRequest);
    				LoginRequset.SetCommand(0);
    				List<string> message = new List<string>();//这里存的是用户的账号密码
    				message.Add(UserInput.value);
    				message.Add(PassInput.value);
    				LoginRequset.SetMessage(message);
    				MainClient.instance.SendMsg(LoginRequset);//发送这条消息给服务器
    			}
    		}
    	}
    	#endregion
    }
    

      

  • 相关阅读:
    python模块搜索路径
    Python数据结构
    Python文件类型
    Python循环语句
    Python条件语句
    python配置文件操作——configparser模块
    python 加密方式(MD5&sha&hashlib)
    python MySQL 获取全部数据库(DATABASE)名、表(TABLE)名
    python sqlite3查看数据库所有表(table)
    027.MFC_映射消息
  • 原文地址:https://www.cnblogs.com/CaomaoUnity3d/p/4610342.html
Copyright © 2011-2022 走看看