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
}
Netty游戏服务器之五Unity3d登陆消息的更多相关文章
- Netty游戏服务器之一
所谓磨刀不误砍柴工,所以在搭建netty游戏服务器之前,我们先要把要准备的东西做好. 首先进入netty的官网下载最新版本的netty的jar包,http://netty.io/downloads.h ...
- Netty游戏服务器之六服务端登录消息处理
客户端unity3d已经把消息发送到netty服务器上了,那么ServerHandler类的public void channelRead(ChannelHandlerContext ctx, Obj ...
- Netty游戏服务器之四protobuf编解码和黏包处理
我们还没讲客户端怎么向服务器发送消息,服务器怎么接受消息. 在讲这个之前我们先要了解一点就是tcp底层存在粘包和拆包的机制,所以我们在进行消息传递的时候要考虑这个问题. 看了netty权威这里处理的办 ...
- Netty游戏服务器之三搭建Unity客户端
既然已经写完了相关的服务器处理类,那么我们就来搭建客户端测试一下. 打开我们的unity3d,然后新建一个c#脚本,取名为MainClient. public class MainClient : M ...
- Netty游戏服务器二
上节我们写个server主类,那么发现什么事情都干不了,是的,我们还没有做任何的业务处理. 接着我们开始写处理客户端连接,发送接收数据的类ServerHandler. public class Ser ...
- Unity3d&C#分布式游戏服务器ET框架介绍-组件式设计
前几天写了<开源分享 Unity3d客户端与C#分布式服务端游戏框架>,受到很多人关注,QQ群几天就加了80多个人.开源这个框架的主要目的也是分享自己设计ET的一些想法,所以我准备写一系列 ...
- Scut游戏服务器引擎之Unity3d接入
Scut提供Unity3d Sdk包,方便开发人员快速与Scut游戏服务器对接: 先看Unity3d示例如下: 启动Unity3d项目 打开Scutc.svn\SDK\Unity3d\Assets目录 ...
- Netty构建游戏服务器(一)--基本概念与原理
一,Netty是什么 1,Netty是由 JBOSS提供的一个 java开源框架. 2,Netty是JAR包,一般使用ALL-IN-ONE的JAR包就可以开发了. 3,Netty不需要运行在Tomca ...
- unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计
unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计 最近做玩票性质的游戏项目,客户端技术是 unity3d 和 android. ...
随机推荐
- Pylot网站Web服务器性能和负载压力测试-适用Windows可绘制图表
为了能够准确地评估网站服务器对网络流量的承受能力,我们一般会采取模拟网站用户访问,通过不断地增加并发数,延长访问时长,从而最终得出网站Web服务器的性能和负载能力.当然也可以通过Web压力测试,来完善 ...
- Docker学习总结之跨主机进行link
原文来自: http://www.cnblogs.com/vikings-blog/p/4223462.html
- MySQL:按后缀缀批量删除表格
Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_schema='s ...
- [ python ] 反射及item系列
反射 什么是反射? 通过字符串的形式操作对象相关属性.python中的事物都是对象: 关键方法: (1)getattr:获取属性 (2)setattr:设置属性 (3)hashattr:检测是否含有属 ...
- kafka 设置消费者线程数
http://blog.csdn.net/derekjiang/article/details/9053863 分布式发布订阅消息系统 Kafka 架构设计 - 目前见到的最好的Kafka中文文章 M ...
- javascript大神修炼记(2)——运算符
读者朋友们好,前面我已经大概的了解了Javascript的作用以及一些基本的函数声明与变量声明,今天我们就接着前面的内容讲解,我们就来看一下javscript的逻辑(正序,分支,循环)以及一些简单的运 ...
- lr计算程序执行消耗时间的比较:
去除程序执行的两种方式: 1.通过一个事务:在需要消除的代码段,使用lr_wasted_time(wasteTime); querySubmit() { char newStr4[10000]=&qu ...
- FastJson过滤掉不需要的返回字段
/** * @Author:txp * @Description:过滤掉不需要返回的字段 * @Param: [src, clazz, args]` * @Data: 2017/10/10 9:10 ...
- 开源地图编辑器 MarbleMap,支持Cocos2d-x坐标系
由9秒社团开发并维护的MarbleMap是支持Cocos2d-x坐标系和as3坐标系的地图编辑器,功能完善高效.这里详细介绍一下它的使用方法! 一.功能简述 由9秒社团开发并维护的MarbleMap是 ...
- 常用的phpstorm快捷键总结(带截屏版)
常用的phpstorm快捷键总结(带截屏版) 目 录 PhpStorm的快捷键有10类 1.编辑相关 2.搜索/替换 3.被使用搜索 4.项目运行 5.debug相关 6.导航相关 7.重构相关 8. ...