-
ET框架Demo
2019-04-02 12:22:38ET框架Demo大家可以查看并学习一下。 -
基于ET框架的斗地主Demo
2018-11-29 16:40:17资源是初见大佬写的ET4.0版本的斗地主,便于新手去掌握ET框架,ET4.0熊猫大佬将持续更新。这个demo也将非常好用 -
ET框架学习链接
2020-09-21 15:22:24ET框架交流论坛:https://et-framework.cn/d/25-et40 基于ET5.0的网络斗地主案例:https://www.taikr.com/loginET框架交流论坛:https://et-framework.cn/d/25-et40
基于ET5.0的网络斗地主案例:https://www.taikr.com/login -
其实现原理也很简单,ET框架提供了一个位置服务器,所有挂载MailBoxComponent的实体对象都会将自己的id跟位置注册到这个位置服务器,其它服务器向这个实体对象发送消息的时候如果不知道这个实体对象的位置,会先去...
-
通过LandlordsCore 学习ET框架
2018-03-26 23:36:13ET框架学习笔记 请大家关注一下我的微博 @NormanLin_BadPixel坏像素 LandlordsCore LandlordsCore是ET交流群里的一位大佬用ET框架写的一个联机斗地主的小demo。 这里通过详读源码来学习ET框架。因为是从零开始...ET框架学习笔记
请大家关注一下我的微博 @NormanLin_BadPixel坏像素
LandlordsCore
LandlordsCore是ET交流群里的一位大佬用ET框架写的一个联机斗地主的小demo。
这里通过详读源码来学习ET框架。因为是从零开始学习,所以会很繁琐。如果看到已经知道的知识点,请跳过。准备
去百度一下游戏服务端,了解一下基础的知识。
MongoDB下载地址(顺便了解一下MongoDB)
不多说了,直接看代码。
希望大家在看此系列学习笔记的时候,身边能够有源码,因为如果所有的代码我都帖上来的话,文章会太长太乱。
一行一行来
从工程资源窗口来看,整个工程的入口是Init脚本。让我们进去瞅瞅。
Init
这是继承MonoBehaviour的一个组件。
public static Init Instance;
第一个变量是静态的Init Instance。有经验的人都知道,这是单例的写法。不过这个写法不是很安全,如果你不小心在两个地方挂了这个脚本,那就会有两个实例了。不过,这是操作可以避免的,不管了。
public ILRuntime.Runtime.Enviorment.AppDomain AppDomain;
这啥? 看不懂。百度一下ILRuntime是什么东西。发现是跟热更新有关的东西。大概跟Lua类似吧。我们暂且把它理解为一个运行ILRuntime代码的域吧。
private IStaticMethod start;
后面的update,lateUpdate,onApplicationQuit都是IstaticMethod变量。从字面意思来看,应该是一个继承了静态函数接口的类(一般I开头的都是接口)。我们进去看看。
IStaticMethod
很短,我就全部贴出来了。
public abstract class IStaticMethod { public abstract void Run(); public abstract void Run(object a); public abstract void Run(object a, object b); public abstract void Run(object a, object b, object c); }
原来不是我想的那样,只是一个有着0-3个参数的Run方法的抽象类。我们知道抽象类是不能直接实例化的,所以这些变量在后面肯定是通过其子类实例化的。不急,我们回到Init继续看下去。
Init
直接就是Start方法了。我们知道Start是在Awake方法之后的,我们先去确认一下有没有后Awake方法。没有,那在这里第一运行的就是Start方法了。
判断unity版本的,不讲。 在切换场景时不自动销毁这个物体,不讲。单例的赋值,不讲。
ObjectEvents.Instance.Add(“Model”, typeof(Init).Assembly);
哼,又是啥。我们去看看ObjectEvents这个类到底是干什么的。从这个调用方法来看,应该是又是一个单例。字面上的意思貌似是跟事件相关的。
ObjectEvents
哦,贼鸡儿长,我们分个P。
ObjectEvents学习笔记Init
看到这里默认大家学完ObjectEvents了。所以上面那句代码
ObjectEvents.Instance.Add("Model", typeof(Init).Assembly);
就是把整个“Model”程序集里面标识了ObjectEvent的类里面需要监听的事件全部都注册到ObjectEvents里面去统一管理。这里只是注册,并没有触发任何的事件。
后面是一些热更新的代码,此教程不讲热更新,跳过。
Game.Scene.AddComponent<OpcodeTypeComponent>();
看起来跟GameObject.AddComponent很像,但是仔细一看,全都是作者自己写的新东西。好,这一段从头开始看。
Game
private static Scene scene;
不用说了,直接去Scene看一下。
Scene :Entity
public string Name { get; set; }
一条名字的变量
什么都不说,去看基类
Entity
呵呵,又这么长,咋们再分个P吧。Entity学习笔记
好的,我们从Entity哪里学习回来了。
继续回来看GameGame
很好,这些都很容易看懂,AddComponent什么的,我们都学过了。
接下来,就是对各种Component的熟悉了。我们可以看到,无论是在这里对Scene的初始化,还是在Init里面,都出现了许多的Component,我们知道,Component才决定了每个实体都有什么具体的功能,这里,我们就对这些Component进行学习。我想,当我们看了两三个Component之后,就能知道Component具体是要怎么写的,就能写出自己的Component了。就像我们刚开始学习Unity的时候,也是先去读Unity的Api,知道组件的写法、用法,才逐渐开始写属于自己的逻辑。心急吃不了热豆腐,我们一步一个脚印,慢慢来。
Landlords的Component学习从Component学习回来,我们知道Game里面存放了一个静态Scene变量scene,并且上面添加了EventComponent和TimerComponent组件。就是这么简单。
Game看完了,我们回到Init。
Init
HolyShit,我们还是继续我们的Landlords的Component学习,实在是有太多组件了。
我们看到,在加载了大量基础功能的组件后,我们开始下载资源了。await BundleHelper.DownloadBundle();
BundleHelper
public static async Task DownloadBundle() { Game.EventSystem.Run(EventIdType.LoadingBegin); await StartDownLoadResources(); Game.EventSystem.Run(EventIdType.LoadingFinish); }
我们看到,这里我们先Trigger了EventSystem的LoadingBegin事件,这个时候,注册了该事件的方法会被执行。比如显示正在加载的UI界面等。(当然要我们先注册好的。咋注册的?在添加EventSystem组件的时候就注册了,还不明白的回去复习。)之后,就是异步开始加载资源了。
public static async Task StartDownLoadResources() { if (Define.IsAsync) { try { using (BundleDownloaderComponent bundleDownloaderComponent = Game.Scene.AddComponent<BundleDownloaderComponent>()) { await bundleDownloaderComponent.StartAsync(); } Game.Scene.GetComponent<ResourcesComponent>().LoadOneBundle("StreamingAssets"); ResourcesComponent.AssetBundleManifestObject = Game.Scene.GetComponent<ResourcesComponent>().GetAsset<AssetBundleManifest>("StreamingAssets", "AssetBundleManifest"); } catch (Exception e) { Log.Error(e.ToString()); } } }
BundleDownloaderComponent学习笔记。
我们通过BundleDownloaderComponent下载了所有需要更新的热更新资源。并加载了”StreamingAssets”bundle。关于该Demo的打包工具,将会是一个大工程。以后我们讲讲。Init
Game.Hotfix.LoadHotfixAssembly();
之后便是热更的内容。我们会在之后开一个热更相关的学习笔记。现在先略过。
2018/4.6 别略过了,再不看就进行不下去了。HotFix
// 加载配置 Game.Scene.GetComponent<ResourcesComponent>().LoadBundle("config.unity3d"); Game.Scene.AddComponent<ConfigComponent>(); Game.Scene.GetComponent<ResourcesComponent>().UnloadBundle("config.unity3d");
这段很简单,先加载配置文件的信息,然后根据信息对游戏进行配置,配置完后卸载配置文件。ConfigComponent学习笔记
再往下看,我发现再不去看HotFix部分的代码就看不下去了。
躲得过初一躲不过十五,大家随我一起去看看HotFix吧。
还在更新ing……
-
ET框架的搭建
2020-03-14 01:05:031:想必大家可能很少听过ET框架 用的是c# .net core 做的服务端 游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高。开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHON 或者...1:想必大家可能很少听过ET框架 用的是c# .net core 做的服务端
游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高。开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHON 或者C++ + LUA 到现在 很多公司开始使用erlang,go,java,c#。目前是一个百花齐放的局面。
不知道的可以看文档
GitHub:https://github.com/egametang/ET/tree/Branch_V5.0/Book2:对于开发人员来说呢,框架搭建起来最重要
小编也是搞了三四天,一个一个的测试,vs和unity卸载安装追加组件
通宵的搞,身体也出现了一点问题(所以也直接上干货了)
新手下载5.0的,低版本小编测很多,bug有点多
到GitHub下载源码:https://github.com/egametang/ET/tree/Branch_V5.0
建议采用GitKraken下载,这个可以实时更新代码,不用去替换文件
也可以直接下载压缩文件,也是一样的,
接下来就是unity和vs2017的选配了,小编就是在这里栽坑里去了
建议使用2017,2019我经过很多测试, 很难跑起来,配置信息太多了我用的配置
1:vs 2017 15.9.21
2:unity 2018.4.17
3:.NET Core 2.2
vs主要的配件:
a. .net 桌面开发
b. visual studio tools for unity
其他配置你看着办,游戏和c++,c#这类勾选
这有一个配置图,到官网去下载.NET Core 2.2
然后就是下载跟着步骤跑就OK, 可以通了,图中是低版本, 建议看我的配置
如果出错大部分是配置问题,
-
ET框架笔记 02生命周期
2020-06-25 11:10:03一、ET框架的生命周期 在ET框架中拥有一套从出生到死亡的生命周期,在Unity中类是于Unity中的生命周期。我们在生命生命周期时候我们需要给他挂载[ObjectSystem],并且让他继承对应的方法。ET框架采用的热更新使用的是...一、ET框架的生命周期
在ET框架中拥有一套从出生到死亡的生命周期,在Unity中类是于Unity中的生命周期。我们在生命生命周期时候我们需要给他挂载[ObjectSystem],并且让他继承对应的方法。ET框架采用的热更新使用的是ILRiTime使用的是c#进行热更。[ObjectSystem] public class LandLoginComponentAwakeSystem : AwakeSystem<LandLoginComponent> { public override void Awake(LandLoginComponent self) { self.Awake(); } } public class LandLoginComponent : Component { //提示文本 public Text prompt; public InputField account; public InputField password; //是否正在登陆(避免登陆请求还没相应时连续点击登陆) public bool isLogining; //是否正在注册中(避免登陆请求还没相应时连续点击注册) public bool isRegistering; public void Awake() { ReferenceCollector rc = this.GetParent<UI>().GameObject.GetComponent<ReferenceCollector>(); //初始化数据 account = rc.Get<GameObject>("Account").GetComponent<InputField>(); password = rc.Get<GameObject>("Password").GetComponent<InputField>(); prompt = rc.Get<GameObject>("Prompt").GetComponent<Text>(); this.isLogining = false; this.isLogining = false; //添加点击事件 rc.Get<GameObject>("LoginButton").GetComponent<Button>().onClick.Add(() => LoginBtnOnclick()); rc.Get<GameObject>("RegisterButton").GetComponent<Button>().onClick.Add(() => LoginBtnOnclick()); } #region 按钮点击事件 public void LoginBtnOnclick() { if(this .isLogining||this.IsDisposed) { return; } this.isLogining = true; LandHelper.Login(this.account.text , this.password.text ).Coroutine(); } public void RegisterBtnOnClick() { if (this.isRegistering || this.IsDisposed) { return; } this.isRegistering = true; LandHelper.Register(this.account.text , this.password.text ).Coroutine(); } #endregion } }
-
基于ET框架和UGUI的简易UI框架(et3.3版)
2018-10-05 00:01:00本框架是在ET框架上进行修改的,使用的是Unity自带的UGUI。 其实ET本身就带有简单的UI框架,建议学习之前先看懂ET里面的UI组件,主要看UIComponent,IUIFactory,UI及与其相关的类,明白ET中整个UI的运作流程。 ... -
ET框架如何跑起来
2020-03-14 01:15:05ET框架运行跑起来 如果还没搭建的,可以看我前面一篇的博客 编译通过后就直接对unity里面的启动,找到Init文件双击打开,然后点击启动 这样下面就是运行起来的,记得前面提前编译服务端哈, 这样就是简单的的跑... -
ET框架——demo与自定义登录
2020-02-25 21:35:28目录 demo 自定义登录 demo ... 下载完成后,打开 ET\Server\server.sln ...打开后按照下面的链接...关于unity ET框架Nlog的控制台Log不出来的问题 选择Server.App,然后【开始执行(不调试)】 打开 ET\Unity\As... -
ET框架和GF框架对比
2020-06-28 09:59:55Unity 框架 GF 和 ET 哪个更好用,各自的优点,缺点是什么? 随着Unity的不断发展,现在出现了很多比较牛逼的 开源 框架,其中,我觉得 最厉害的是 Game Framework 和 Egametang 这2个框架都带着ECS的思想,有都用过... -
【Unity】ET框架学习笔记
2018-11-12 10:10:489-10开始初学et框架 懂的不多 只说自己了解到的部分 运行 1.先下载ET框架然后根据指南运行 2.客户端 目前已支持2018,自动生成解决方案;2017以前需要在vs生产解决方案和添加引用 3.服务端 用vs2017打开ET/... -
ET框架简介
2020-06-28 09:32:00ET是一个开源的游戏客户端(基于unity3d)服务端双端框架,服务端是使用C# .net core开发的分布式游戏服务端,其特点是开发效率高,性能强,双端共享逻辑代码,客户端服务端热更机制完善,同时支持可靠udp tcp ... -
ET框架自动引用UI组件
2020-05-06 12:29:43写这篇博客的初心,是在学习ET框架时,看到UI组件的引用使用到ReferenceCollector这个类来保存需要引用的组件,但是这个类需要开发者自己定义组件名与拖动关系,想到开发中一个个的命名拖动有点麻烦,便自己写了一个引用... -
基于ET框架和UGUI的简单UI框架实现(转)
2018-10-04 23:48:00本框架是在ET框架上进行修改的,使用的是Unity自带的UGUI。 其实ET本身就带有简单的UI框架,建议学习之前先看懂ET里面的UI组件,主要看UIComponent,IUIFactory,UI及与其相关的类,明白ET中整个UI的运作流程。 其... -
ET 框架笔记【转载】
2018-10-31 13:18:35ET框架笔记 (笑览世界写)(转) 客户端 1.使用unity2017.2.0版本及以上2018版以下,编译原始版ET客户端报没有引用错误时,删除hoxfit下引用的UnityEngine.dll和UnityEngine.UI.dll,重新引用…\Editor\Data\... -
[1] ET框架初养成 爱之初体验
2019-03-16 17:59:55下一篇[2] ET框架初养成 mac OS第一次启动Demo 我写ET框架连载文章的目的有两点 第一点 是记录自己学习这个ET框架的点点滴滴. 看懂了 敲通了 并且记录了 第二点 就是分享自己踩平过的路 希望其中某一个心得体会... -
ET框架之_Demo运行教程
2019-10-18 20:23:53ET框架目录: 一.运行服务端 1.删除NLog.xsd 点击进入server文件夹打开server.sln这个解决方案 然后找到server.App这个项目,打开后,删除NLog.xsd 2.修改NLog.config内容 路径:\ET\Server\App\NLog.... -
ET框架5.0 自学笔记(1) - ET框架介绍
2020-05-02 12:40:342020.5.2 现在Unity的后端开源方案还是蛮多的 稍微列举一下 Barebones Master Server 没使用过不过多介绍 DarkRift Networking 没使用过不过多介绍 Forge Networking 用过2.0,已经帮你把底层的东西都做好了,你要... -
ET框架Init例子学习记录
2019-01-16 00:19:35这里只记录ET框架在学习过程中的一些思路 这里需要从打印入手来进行步骤理解: 复制hotfix第一步,是复制热更文件,这是用到的ILRT的部分,也是最一开始要测试的地方 第一步就直接来的相当隐晦的地方,... -
ET框架Actor使用与心得
2018-08-31 15:17:00Actor是ET框架最核心的东西了,使用Actor之前一定要明白什么是分布式服务器,我简单说一下。 分布式简单说就是我有3台服务器共同为一个游戏服务、那么他们的关系是: 客户端第一次通信: 客户端-验证服务器-网关... -
ET框架-服务端-Program学习笔记
2018-04-18 16:21:15而ET框架,服务端和客户端的代码很多都是共用的,这也是ET方便的一点。所以,如果你是直接来看服务端的,希望你对客户端的代码已经有了足够的了解,之前在客户端讲过的代码我会一笔带过。 这里是客户端代码学习笔记... -
ET框架Demo运行教程(一)
2019-06-28 17:27:31ET框架是熊猫大大写的 讨论QQ群 : 474643097 Demo git地址:https://github.com/egametang/ET 下载完成后大概是这个模样。 点击进入server文件夹打开server.sln这个解决方案 然后找到server.App这个项目,打开后,... -
UNITY ET 框架
2019-11-03 10:48:00GITHUB上近3000星的开源框架,包括了服务器客户端,IL RUNTIME热等特点,对于新项目,值得拥有 -
MongoDB连接数据量 配合ET框架使用
2019-05-08 18:13:03MongoDB连接数据量 配合ET框架使用 . // An highlighted block using ETModel; using Microsoft.IdentityModel.Protocols; using MongoDB.Bson; using MongoDB.Driver; using System; using System.Collections.... -
ET框架学习笔记 -基于Unity3D的ECS组件式编程
2019-02-19 16:24:19ET框架是一个十分强大的可以实现全热更的开源双端游戏框架,对于笔者这种人来说,简直就是量身打造,纯C#开发爽的不要不要的。就目前来看,ET框架已经相对稳定,猫大还在不断更新中,但是网上相关资料与技术博客还是... -
ET框架学习——消息系统之三
2019-02-26 19:30:49鉴于我之前对于游戏的网络开发部分没有经验。... 这个应该是ET框架中消息相关的类,继承自Stream类。ChunkSize字段的代表一个字节数组的最大长度。后面两个队列应该是用于存储消息流的。 public int Ch... -
FGUI,UGUI在ET框架上的使用以及区别
2018-11-29 20:33:45这两天把FGUI差不多学完了,今天看了点ET框架,发现如何在ET上使用FGUI的文档很少很少。就自己根据初见大佬的ET4.0的斗地主,他的一篇在ET上如何使用FGUI,和同事自己写好的一些界面,了解了下如何在ET框架上使用FGUI...
-
【数据分析-随到随学】Spark理论及实战
-
python机器学习和深度学习
-
2021-01-19 SONiC系统管理14 MACsec管理
-
Java SE(20) 运算符——赋值运算符
-
jackson封装成将数据转化为json格式的工具类(包括时间)
-
JS 数组逆序输出
-
AAAI 2021上与【视频理解】相关论文(五篇)
-
2021-01-19
-
QQTIM案例.zip
-
Curl转python在线工具[转]
-
【数据分析-随到随学】Python语法强化与数据处理
-
1013 摆积木
-
【数据分析-随到随学】Tableau数据分 析+PowerBI
-
IPN532 .cs
-
将不限制长度的十六进制转换为八进制,使用字符串进行操作完成转换。
-
MySQL数据库操作.doc
-
Java SE(21) 拓展:两个数交换的四种方式
-
21年新接口自动化测试视频postman教程 零基础接口测试
-
pyechart数据可视化
-
Java SE(24)补充——原码、反码、补码