Unity进阶之ET网络游戏开发框架 06-游客登录
版权申明:
- 本文原创首发于以下网站:
- 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
- 优梦创客的官方博客:https://91make.top
- 优梦创客的游戏讲堂:https://91make.ke.qq.com
- 『优梦创客』的微信公众号:umaketop
- 您可以自由转载,但必须加入完整的版权声明!
概要:
- ET4示例程序中的登录流程大致为:实例化UILogin进行登录->实例化UILobby进行匹配→加载Map场景进行游戏
- 由于其流程对于新手有点复杂,这里介绍一种简单的学习方式:
- 直接创建一个StartUI
- 点击“游客登录”按钮执行登录功能
创建一个StartUI:
- 将启动UI做成一个预制体,并命名为StartUI,UI界面如下:


- 由于ET4采用ab包的方式加载资源,所以要:
- 预制体设置Asset Label为:startui.unity3d
- 用ET4的编辑器扩展:Tools→打包工具→选择PC平台进行打包
- 打包后的资源放在???
- 不需要启动服务端或文件服务器,ET4框架可以找到打包后的ab包
- 编辑器状态下会查找预制体而不从ab包加载
- 用代码加载该预制体:
namespace ETHotfix
{
public static class MyStartUIFactory
{
public static UI Create()
{
try
{
ResourcesComponent rc = ETModel.Game.Scene.GetComponent<ResourcesComponent>();
rc.LoadBundle(MyUIType.MyStartUI.StringToAB());
GameObject goPrefab = rc.GetAsset(MyUIType.MyStartUI.StringToAB(), MyUIType.MyStartUI.ToString()) as GameObject;
GameObject go = UnityEngine.Object.Instantiate(goPrefab);
UI ui = ComponentFactory.Create<UI,string,GameObject>(MyUIType.MyStartUI.ToString(), go, false);
ui.AddComponent<MyStartUIComponent>();
return ui;
}
catch (Exception e)
{
Log.Error(e);
return null;
}
}
}
}
点击“游客登录”按钮执行登录功能
namespace ETHotfix
{
[ObjectSystem]
public class MyStartUIAwakeSystem : AwakeSystem<MyStartUIComponent>
{
public override void Awake(MyStartUIComponent self)
{
self.OnAwake();
}
}
public class MyStartUIComponent : Component
{
GameObject goStartButton;
public void OnAwake()
{
var rc = this.Parent.GameObject.GetComponent<ReferenceCollector>();
goStartButton = rc.Get<GameObject>("StartButton");
goStartButton.GetComponent<Button>().onClick.AddListener(OnStartClick);
}
private void OnStartClick()
{
// Coroutine()方法模拟将OnStartClickAsync()作为协程执行的效果(确保在单线程中执行)
OnStartClickAsync().Coroutine();
}
private async ETVoid OnStartClickAsync()
{
// 处理游客登录点击
try
{
// 1: 创建一个realmSession,并利用此session去call一个rpc消息(模型层session表示具体网络参数和连接,热更层负责通信逻辑,它调用模型层)
ETModel.Session realmModelsession = ETModel.Game.Scene.GetComponent<NetOuterComponent>().Create(GlobalConfigComponent.Instance.GlobalProto.Address);
Session realmHotfixSession = ComponentFactory.Create<Session, ETModel.Session>(realmModelsession);
// 2:若登录失败,会收到异常;若成功,则会得到认证信息(模型层没有C2R_Login的类定义,所以必须配套由热更层的session去call)
var r2cLogin = await realmHotfixSession.Call(new C2R_Login()
{
Account = Guid.NewGuid().ToString(),
Password = "111111",
}) as R2C_Login;
// 3:再利用此认证信息中的网关服务器地址,去创建gateSession
ETModel.Session gateModelsession = ETModel.Game.Scene.GetComponent<NetOuterComponent>().Create(r2cLogin.Address);
Session gateHotfixSession = ComponentFactory.Create<Session, ETModel.Session>(gateModelsession);
// 4:用gateSession去登录gate服(传入登录key)
var g2cLoginGate = await gateHotfixSession.Call(new C2G_LoginGate()
{
Key = r2cLogin.Key
}) as G2C_LoginGate;
// 5:登录成功后,用返回的playerId,创建Player对象
var p = ETModel.ComponentFactory.CreateWithId<Player>(g2cLoginGate.PlayerId);
ETModel.Game.Scene.GetComponent<PlayerComponent>().MyPlayer = p;
// 6:发送登录完成事件
Game.EventSystem.Run(MyEventType.MyLoginFinish);
// 7: 保存热更和模型层Session,以便将来直接通过SessionComponent.Instance单件访问
Game.Scene.AddComponent<SessionComponent>().Session = gateHotfixSession;
ETModel.Game.Scene.AddComponent<ETModel.SessionComponent>().Session = gateModelsession;
}
catch (Exception e)
{
Log.Error(e);
}
}
}
}
- EventSystem.Run引发本地事件,Session.Call|Send引发网络消息
处理登录成功消息:
namespace ETHotfix
{
[Event(MyEventType.MyLoginFinish)]
class MyLoginFinish : AEvent
{
public override void Run()
{
// 移除登录UI
UI uiLogin = Game.Scene.GetComponent<UIComponent>().Get(MyUIType.MyStartUI.ToString());
uiLogin.GameObject.SetActive(false);
// 加载游戏场景(也可以从ab包加载)
SceneManager.LoadScene(1);
}
}
}
Unity进阶之ET网络游戏开发框架 06-游客登录的更多相关文章
- Unity进阶之ET网络游戏开发框架 08-深入登录成功消息
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Unity进阶之ET网络游戏开发框架 07-修正游客登录的异步BUG
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Unity进阶之ET网络游戏开发框架 01-下载、运行
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Unity进阶之ET网络游戏开发框架 02-ET的客户端启动流程分析
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Unity进阶之ET网络游戏开发框架 04-资源打包
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Unity进阶之ET网络游戏开发框架 05-搭建自己的第一个Scene
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Unity进阶之ET网络游戏开发框架 03-Hotfix层启动
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Unity进阶技巧 - 动态创建UGUI
前言 项目中有功能需要在代码中动态创建UGUI对象,但是在网上搜索了很久都没有找到类似的教程,最后终于在官方文档中找到了方法,趁着记忆犹新,写下动态创建UGUI的方法,供需要的朋友参考 你将学到什么? ...
- Unity进阶----Lua语言知识点(2018/11/08)
国内开发: 敏捷开发: 集中精力加班堆出来第一个版本 基本没啥大的bug 国外开发: 1).需求分析: 2).讨论 3).分模块 4).框架 5).画UML图(类图class function)(e- ...
随机推荐
- [NOIP2009]靶形数独 题解
407. [NOIP2009] 靶形数独 时间限制:5 s 内存限制:128 MB [问题描述] 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低. ...
- STM32F072从零配置工程-串口USART配置
也是使用HAL库进行配置,通过STMCube生成代码,可以通过这个简单的配置过程看到STMCube生成代码的一种规范: 从main函数入手观察其外设配置结构: 首先是HAL_Init()进行所有外设的 ...
- JavaScript入门小案例
笔记: <!-- JavaScript的特点: 1.基于对象和事件驱动 JavaScript把HTML页面中的每一个元素都当做一个对象来处理,并且这些对象都具有层次关系, 像一颗倒立的树,这种关 ...
- spring boot 配置mybatis plus 控制台打印sql
spring boot 版本2.1.5 mybatis plus 版本3.1.1 aplication.properties中添加 logging.level.com.demo.system.mapp ...
- py+selenium 自动判断页面是否报错并显示在自动化测试报告【原创】
有需求就会去研究解决的路子. 现在需求就是,测试报告报错信息一堆,但却无法肉眼看出是什么问题,你只能知道定位不到元素或是超时,但你却不知道其实进入页面就报错了或是提交表单就报错了!也就是看到报错,需要 ...
- pgsql查询优化之模糊查询
前言 一直以来,对于搜索时模糊匹配的优化一直是个让人头疼的问题,好在强大pgsql提供了优化方案,下面就来简单谈一谈如何通过索引来优化模糊匹配 案例 我们有一张千万级数据的检查报告表,需要通过检查报告 ...
- HelloDjango 启动!免费带你学Django全栈!
欢迎 追梦 入伙 HelloGitHub-Team,同时为我们带来了完全免费的 HelloDjango 系列教程,全网首发于 HelloGitHub 公众号.让想你的系列文章被跟多人看到,那就来加入我 ...
- MyBatis框架之SQL映射和动态SQL
使用MyBatis实现条件查询 1.SQL映射文件: MyBatis真正的强大之处就在于SQL映射语句,MyBatis专注于SQL,对于开发人员来说也是极大限度的进行SQL调优,以保证性能.下面是SQ ...
- cve-2018-14515复现
一.环境 Windows NT WIN-RRI9T9SN85D 6.1 build 7600 (Windows 7 Business Edition) i586 Apache/2.4.23 (Win3 ...
- sqlserver2014创建数据库时,错误提示如下:尝试打开或创建物理‘c:\数据库\db.mdf’时,Create File遇到操作系统错误5(拒绝访问)
CREATE DATABASE test1 ON PRIMARY ( NAME =test1, FILENAME='C:\Program Files\test1.mdf',SIZE=10240K ...