您现在的位置是:首页 > 前端 > UnityUnity

ET框架笔记

Tdou2020-05-23【Unity】人已围观

简介 ET框架笔记 注:权限对所有人公开,都有权限编辑修改,须QQ登录TIM。各位一起完善才是王道,存在不足之处还请指正。ET框架启动运行流程:1.建议先看ET框架中的运行指南,另外查看下其

 

ET框架笔记

 

注:权限对所有人公开,都有权限编辑修改,须QQ登录TIM。各位一起完善才是王道,存在不足之处还请指正。

ET框架启动运行流程:

1.建议先看ET框架中的运行指南,另外查看下其它相关文档以便以后使用。

2.安装Unity2017及以上版本都可,新手建议默认版本2017.1系列版本,VS安装2017版本。

3.用Unity2017及以上打开ET框架里的Unity文件,即Unity工程文件。

4.将Unity工程中的解决方案全部编译生成一次,将ET框架中的Sever文件下Sever解决方案打开重新编译生成一次,遇到报错按下文解决。

5.将Unity中Tools\打包工具打开,点击标记,选择平台,然后点击开始打包。

6.点击Tools\全局配置,将IP地址修改为本机地址8。或者使用默认的IP,如果不在本机运行客//**/户端需要修改IP为本机IP,最后保存、关闭。

7.点击Tools\Web资源服务器。

8.点击Tools\命令行配置,左上角选择LocalAllSever.txt,修改OuterHost和OuterHost2的IP地址同全局配置中的服务器地址的IP一致,注意保存然后启动。

注:建议先用unity打开,再打开VS,可以避免unity的dll引用丢失。

 

客户端

 

  • 使用unity2017.2.0版本及以上2018版以下,编译原始版ET客户端报没有引用错误时,删除hoxfit下引用的UnityEngine.dll和UnityEngine.UI.dll,

  • 重新引用...\Editor\Data\UnityExtensions\Unity\GUISystem文件下的unityfengine.UI.dll

  • 和引用...\Editor\Data\Managed\UnityEngine 文件下的UnityEngine.dll

  • 和UnityEngine.CoreModel.dll,

  • 注意UnityEngine.dllUnityEngine.CoreModel.dll必须都为...\Editor\Data\Managed\UnityEngine 文件内的,

  • 不然会报错。

 

z

  • unity2017.2.0版本及以上,你还可能用到的类库为:UnityEngine.PhysicsModule.dll,若出现如下截图错误,可在如下文件夹目录下引用它...\Editor\Data\Managed\UnityEngine ,根据实际情况添加,也可能会出现其它报错,需要引用对应的dll,当然不怕麻烦或者为了不报类似错可以把如下文件夹目录下引用它...\Editor\Data\Managed\UnityEngine下的所有dll全部引用。2017.2.0及以上的版本把unity的dll按系统分类拆分成很多个,所以需要分别引用需要的dll。

  • 如果Hotfix报关于UI的Canvas的错,需要在Hotfix中添加UnityEngine.UIModule.dll。

  • (可选)使用unity2017.2.0以下版本,编译原始版ET客户端报没有引用错误时,删除hoxfit下引用的UnityEngine.dll和UnityEngine.UI.dll,重新引用...\Editor\Data\UnityExtensions\Unity\GUISystem文件下的unityengine.UI.dll和引用...\Editor\Data\Managed 文件下的UnityEngine.dll。

  • Microsoft Visual Studio使用15.5.4以上版本,否则Unity可能会加载不了Hotfix.dll。如果加载不了需要自行重新引用Hotfix.dll。

  • 安装VS2017、unity2017及以上版本后,按流程操作无误,可能仍出现问题,可重启计算机试试。

  • 注1:在运行和打包时,关闭全局配置界面,避免出现报错干扰。

  • 注2:Tool上ILRuntime的生成工具是为了给ILRuntime提速用,需先加上ILRuntime的宏再点击上面的两个按钮,不然会报错或者无法正常生成。

  • 注3:在2018中打包需要Api Compatibility Level选择 .NET4.X库,不然会报Bson的错。

  • 注4:如果在运行时报System.Reflection.AmbiguousMatchException: Ambiguous match found这种绑定错误,查看CLRBindings类中是否存在UnityEngine_Resources_Binding.Register(app),如果存在就注释掉在运行。

 

 

 

客户端修改界面步骤:

调试方法:

  • 1、unity设置 PlayerSetting -OtherSetting-ScrptingDefineSymbol里的ILRuntime宏删除。

    • 2、在VS里重新生成解决方案

    • 3、工具菜单标记资源包在点PC生成资源包菜单

    • 4、将Release文件夹下的PC文件夹替换掉主工程文件夹(LandlordsCore-master)文件夹下的PC文件夹

    • 5、热更时恢复unity宏标记设置

  • 增加界面:

    • 1.在Global/UI下添加需要增加界面(如:NewUI)的父物体(如:NewUIParent),在UI的ReferenceCollector上添加界面的父物体(NewUIParent)的引用。

    • 2.需要增加的界面(NewUI)添加CanvasConfig并将CanvasName设置为需要增加界面的父物体(NewUIParent)的名字。

    • 3.在UIType枚举里面添加枚举成员(如:BEnum)。

    • 4.模仿UILoginFactory类新建一个UI***Factory类,在界面添加按钮处调用打开方法:Hotfix.Scene.GetComponent<UIComponent>().Create(UIType.BEnum);

    • 5.在新增加的界面(NewUI)做逻辑处理须模仿UILoginComponent类新建一个UI***Component类,在类中实现想要的效果;在新增加的界面(NewUI)的ReferenceCollector组件上需要的引用。

    • 6.热更时须打开unity设置标记输入框里的ILRuntime宏,Hotfix工程添加ILRuntime宏(属性----->生成-->条件编译符号处加上 ILRuntime,重新生成修改过的工程,如不添加宏会无法启动。)

    • 7.点击工具菜单Tools-->打包-->设置标记-->设置标记,再Tools-->打包-->PC生成资源,将Release文件夹下的PC文件夹替换掉主工程文件夹(LandlordsCore-master)文件夹下的PC文件夹。

 

  • 注1:部分类功能注释,敬请谅解,还请有心人共同添加。带¥为可能需要做改动类。

    • 1¥.GlobalConfigComponent:从配置文件 GlobalProto 中读取资源下载地址和服务器地址。

    • 2.ConfigHelper:配置文件读取。

    • 3.ResourcesComponent:AssetBundle资源加载。

    • 4.OpcodeTypeComponent:获取操作码(ID)和对应的类,根据特性读取。

    • 5.DllHelper:dll读取加载。

    • 6.DoubleMap:可双向读取的字典;根据键读取值,值读取键。

    • 7.IMessagePacker:序列化接口。

    • 8.MongoPacker:序列化类。

    • 9.ClientDispatcher客户端消息处理类。

    • 10.ClientFrameComponent:帧同步类。

    • 11.ClientDispatcher:客户消息同步类。

    • 12.NetOuterComponent:外网组件类。

    • 13.ObjectEvents:加载dll类及运行dll类。

    • 14.PlayerComponent:玩家数操作类。

    • 15.ActorComponent:让Entity具备位置透明和接收Actor消息的功能。

    • 16¥.LayerNames:层名称设置和获取。(可能需要做改动类¥)。

  • 注2:热更时,只能hotfix拓展Model中的类,model无法拓展hotfix中的类,热更的拓展方法只能放在hotfix中,model中不能调用hotfix中的方法。

  • 注3:为避免相同资源每次打包hash值不同,备份Library/assetDatabase3,先复制再打开工程,因为每次打开新工程都会不同。

  • 注4:entity中不能保存entity ,否则会报一个字典有相同的Key,可以挂组件解决需求。

  • 注5:热更中out关键字热更层内部可用,但不能跨域,跨域out就相当于跨域指针了,ILRuntime堆栈是和Mono分开的。

 

 

服务端

 

(基于哲学棋牌Demo1.0)

各服务器作用

注:按需将整个系统拆分成不同的进程。比如你需要一个单独处理聊天的服务器进程,那么可以增加Chat进程。根据需求配置服务器功能。

1.Manager:连接客户端的外网和连接内部服务器的内网,对服务器进程进行管理,自动检测和启动服务器进程。加载有内网组件NetInnerComponent,外网组件NetOuterComponent,服务器进程管理组件。自动启动突然停止运行的服务器,保证此服务器管理的其它服务器崩溃后能及时自动启动运行。

2.Realm:对ActorMessage消息进行管理(添加、移除、分发等),连接内网和外网,对内网服务器进程进行操作,随机分配Gate服务器地址。加载有ActorMessage消息分发组件ActorMessageDispatherComponent,ActorManager消息管理组件ActorManagerComponent,内网组件NetInnerComponent,外网组件NetOuterComponent,服务器进程管理组件LocationProxyComponent,Gate服务器随机分发组件。客户端登录时连接的第一个服务器,也可称为登录服务器。

3.Gate:对玩家进行管理,对ActorMessage消息进行管理(添加、移除、分发等),连接内网和外网,对内网服务器进程进行操作,随机分配Gate服务器地址,对Actor消息进程进行管理,对玩家ID登录后的Key进行管理。加载有玩家管理组件PlayerComponent,ActorMessage消息分发组件ActorMessageDispatherComponent,ActorManager消息管理组件ActorManagerComponent,内网组件NetInnerComponent,外网组件NetOuterComponent,服务器进程管理组件LocationProxyComponent,Actor消息管理组件ActorProxyComponent,管理登陆时联网的Key组件GateSessionKeyComponent。

4.Location:连接内网,服务器进程状态集中管理(Actor消息IP管理服务器)。加载有内网组件NetInnerComponent,服务器消息处理状态存储组件LocationComponent。对客户端的登录信息进行验证和客户端登录后连接的服务器,登录后通过此服务器进行消息互动,也可称为验证服务器。

5.Map:连接内网,对ActorMessage消息进行管理(添加、移除、分发等),对场景内现在活动物体存储管理,对内网服务器进程进行操作,对Actor消息进程进行管理,对ActorMessage消息进行管理(添加、移除、分发等),服务器帧率管理。ActorMessage消息分发组件ActorMessageDispatherComponent,ActorManager消息管理组件ActorManagerComponent,内网组件NetInnerComponent,服务器进程管理组件LocationProxyComponent,服务器帧率管理组件ServerFrameComponent。

6.AllServer:将以上服务器功能集中合并成一个服务器。另外增加DB连接组件DBComponent,DB管理组件DBProxyComponent。

7.Benchmark:连接内网和测试服务器承受力。加载有内网组件NetInnerComponent,服务器承受力测试组件BenchmarkComponent。

 

数据库(基于哲学绅士的ET棋牌Demo)

 

数据库组件

一、Hotfix

1.DBQueryBatchRequestHandler : AMRpcHandler<DBQueryBatchRequest, DBQueryBatchResponse>

批量加入数据库缓存字典。

2.DBQueryJsonRequestHandler : AMRpcHandler<DBQueryJsonRequest, DBQueryJsonResponse>

通过json批量加入数据库缓存字典。

3.DBSaveRequestHandler : AMRpcHandler<DBSaveRequest, DBSaveResponse>

保存数据到数据库。

4.DBSaveBatchRequestHandler : AMRpcHandler<DBSaveBatchRequest, DBSaveBatchResponse>

批量保存数据到数据库。

5.DBQueryRequestHandler : AMRpcHandler<DBQueryRequest, DBQueryResponse>

数据添加到数据库缓存字典。

二、Model

1.InnerMessage类中包含数据请求和数据回复相关的类。

(1)、数据请求类继承ARequest,包含有DBQueryRequest缓存请求类、DBQueryBatchRequest批量缓存请求类、DBQueryJsonRequest用Json缓存请求类、DBSaveRequest数据保存请求类、DBSaveBatchRequest数据批量保存请求类。

(2)、数据回复类继承AResponse,包含有DBQueryResponse缓存回复类、DBQueryBatchResponse批量缓存回复类、DBSaveResponse数据保存回复类、DBSaveBatchResponse数据批量保存回复类。

2.DBProxyComponent:用于进行数据缓存保存和保存到数据库操作。

3.DBComponent:连接数据库。

4.DBCacheComponent:数据库缓存组件。

5.DBTask类的子类DBSaveTask执行数据保存、DBSaveBatchTask批量数据保存、DBQueryTask查询数据库保存至数据缓存字典、DBQueryBatchTask批量查询数据库保存至数据缓存字典、DBQueryJsonTask用Json查询数据库保存至数据缓存字典。

三、数据库读写

(1)、原版ET数据库读写

1.创建需要读写的类,继承Entity。

2.读写数据,调用DBProxyComponent类中的方法查询或者保存。

查询方法有:

Query<T>(long id, bool needCache = true)按类名的ID查询、

QueryBatch<T>(List<long> ids, bool needCache = true)批量按类名的ID查询、QueryJson<T>(string json, bool needCache = true)按类名用json进行自定义查询。

保存方法有:

Save(Disposer disposer, bool needCache = true)按保存类中数据、SaveBatch(List<Disposer> disposers, bool needCache = true)批量保存类中数据、Save(Disposer disposer, bool needCache, CancellationToken cancellationToken)定时保存超时取消保存,保存时需要 EntityFactory.CreateWithId<AAA>(IdGenerater.GenerateId());实例化需要保存的类,AAA为需要保存的类名。

(2)、棋牌Demo数据库读写

1.创建需要读写的类,继承EntityDB。

2.EntityDB类上方添加标签 [BsonKnownTypes(typeof(AAA))],AAA为需要读写的类名。

 

3.读写方法与原版ET相同。

 

ET添加修改消息

消息发送接收路线:

例如:消息发送路线:客户端-->网关服务器-->内部功能服务器-->网关服务器-->客户端

  1. 游戏启动时通过标签将协议码为键、消息类为值存入字典,将消息请求类作为键、消息处理类作为值存入字典;

  2. 将消息通过下文第四步中的Session类由AChannel类Send发送,通过TCP或UDP发送到目标网关服务器;

  3. 网关服务器接收到消息由网关消息助手类处理发给内部功能服务器;

  4. 内部功能服务器的消息处理类处理消息,并通过消息回复类作为载体回传消息给网关服务器;

  5. 网关服务器消息处理助手类中由消息回复类作为载体接收好数据,被消息处理助手类回传给客户端;

  6. 客户端用相同的消息回复类接收回传的数据进行使用。

服务器收发消息通过网关服务器gate进行,gate接收消息后根据情况将消息分发给其它服务器处理,其它服务器处理后消息回传给gate,再由gate发给客户端。

 

内部功能服务器实现分布式服务器功能:除Manager管理服务器和Location转发Actor的服务器之外的服务器均作为路由服务器,ActorProxyComponent消息管理组件作为路由信息存储组件存储本服务器使用的消息ID和ActorProxy类处理Actor消息类(发送、接收等),先读取路由信息存储组件中的缓存,缓存没有的情况下会由ActorProxy通过LocationProxyComponent服务器消息处理状态存储组件向Location转发Actor消息IP对应的编号、管理服务器发送key(Actor消息ID),Location服务器通过LocationComponent处理其它服务器发送的Actor消息ID获取消息的对应的IP,请求IP对应编号的服务器通过ActorProxyComponent或UnitGateComponent类读取IP编号,然后通过IP编号能获取到对应的IP和端口,从而发送消息给目标服务器。从Location服务器收到的Actor消息IP对应的服务器IP编号会存储在本地服务器缓存。

 

群主熊猫解析1:

Actor其实非常非常简单,别想的很复杂,一般分布式游戏服务器,跨进程发消息,比如A玩家在Map1,B玩家在Map2,A是B的好友,那么B并不知道A在哪个Map上,B玩家怎么给A玩家发消息呢?一般有个friend server,A可以在进入map1的时候把自己的位置注册到friend server上,那么friend server就知道了A玩家的位置,B发消息就可以通过friend server来转发消息给A。

那么我们可以简化一下这个过程,A玩家登录进入Map1的时候把自己注册到Location server,告诉location server自己在Map1上面,B要发消息给A,直接去查询location server不就知道A在哪个map上了吗,比如B查到A的位置在Map1上面,就可以直接发消息到map1,消息里面带了一个actorid也就是A玩家的id,Map1收到这个消息发现这是一个IActorMessage,就会根据这个actorId找到A,把消息交给A处理。这就是actor位置透明的原理。 B发消息给A用的的ActorProxy,因为A一般在一个进程会呆比较长的时间,B没必要每次都去查A的位置,第一次发送不知道A的位置,然后去location查了A的位置,之后B知道了A的位置就不用查了,直接发到Map1就行了。问题是万一A不在Map1了,这时B发到Map1的消息根据A的id就会在Map1上找不到A。这时会返回一个not found actor的错误给B,B收到这个消息会重新去location server查A的位置,再重新发送。

群主熊猫解析2:

ET的actor用个比喻来简单说明一下

中国有很多城市(进程),城市中有很多人(entity)居住,每个人都有身份证号码(Entity.Id)。一个人每到一个市都需要办理居住证,分配到唯一的居住证号码(InstanceId),居住证号码的格式是2个字节市编号+4个字节时间+2个字节递增。身份证号码是永远不会变化的,但是居住证号码每到一个城市都变化的。

现在有个中国邮政系统(actor)。假设小明要发信给女朋友小红

1.假设小明知道小红的居住证号码,那么邮政系统可以根据居住证号码头两位找到小红居住的城市,然后再根据小红的居住证编号,找到小红

2.假设小明不知道小红的居住证号码,但是他知道小红的身份证号码,怎么办呢?邮局想了一个办法,每个人到一个城市都必须把自己的居住证跟

身份证上报到中央政府(location server),这样邮局知道身份证就可以去中央政府拿到小红的居住证号码,从而发送信件给小红。

3.假设小红之前在广州市,小明用小红的身份证给小红发信件了。邮局从中央政府获取了小红的居住证号码,给小红发信。发信的这个过程中,小红搬家了,从广州搬到了深圳,这时小红在中央政府上报了自己新的居住证。邮局的信送到到广州的时候发现,小红不在广州。那么邮局会再次去中央政府获取小红的居住证,重新发送,有可能成功有可能再次失败,这个过程会重复几次,如果一直不成功则告诉小明,信件发送失败了。

4.邮局系统发现每次去中央政府获取居住证号码很耗时间,而且人搬家的次数并不多,于是做了一个优化,如果之前发过信的话,他会把居住证跟身份证保存下来,下次再发的时候直接用保存的居住证发信,发送失败了再去中央政府获取居住证重发

5.邮局系统的信都是有回执的,有两种回执,一种回执没有内容,只表示小红收到了信,一种回执带了小红的回信。小明在发信的时候可以选择使用哪种回执形式。小明给小红不能同时发送两封信,必须等小红的回执到了,小明才能继续发信。

6.小红有个信箱(MailboxCompnent),有可能会同时收到很多人的信。但是她必须一封一封的信看,比方说小明跟小宝都发了信给小红,小红先收到小明的信,再收到了小宝的信。小红先读小明的信,小明信中让小红给外婆打个电话(产生协程)再给自己回信,注意这期间小红也不能读下一封信,必须打完电话后才能读小宝的信。

注1: 所有的热更层async void方法一定要try catch异常,并且log.error(exception),否则里面抛异常会看不到正确的出错堆栈。

注2:AOT问题,集合dictionary是mono层的类,所以mono层没用到的泛型,ilrt层是有问题的,最好用Dictionary<object, object>或者用非泛型集合。

注3:热更层定义的类可以随便用泛型,mono层的类只要mono层用过的泛型热更层也可以用。

注4:消息长度限制是65535。

 

此分布式服务器框架如果不够用,瓶颈在于Location服务器的消息处理速度,可增加location服务器数量解决:方法一,在将Actor消息的ID与与所在服务器的IP对应编号作为消息传给所有Location进行进行同ETDemo中Location服务器相同的处理,在处理Actor消息时,只需要向多个location服务器中的任意一个发送消息即可获取到Action消息对应的IP编号。此方法瓶颈在于location服务器内能存储的c消息ID和IP编号的键值对个数,如还不够用可使用方法二。方法二:在向location服务器发送Actor的ID和IP编号键值对消息时,可用ET现有的组件随机发送到Location服务器中的一个进行保存,然后部分服务器写入数据,部分服务器读数据......还是算了,能把一个服务器存满至少几个亿的用户了.....

 

此分布式服务器框架相当于即时通信服务器架构中的一种,Location服务器提供存储和查询目标消息服务器的IP服务:

https://www.cnblogs.com/myd620/p/6081100.html 即时通信服务器架构

http://blog.csdn.net/u010738184/article/details/49472795

分布式系统 (大规模分布式系统原理解析和架构实践)

https://www.cnblogs.com/liulun/p/3625941.html

分布式缓存服务器设计原理

 

物理分布式服务器发布

方法一:更改LandlordsCore-master\Config\StartConfig文件下的IP端口配置文件,将需要发布在物理服务器上的服务器编号对应的配置最后一项设置为 "ServerIP" : "*" ,将不需要发布在此物理服务器上的服务器编号对应的配置最后一项设置为 "ServerIP" : "" ,然后启动服务器即可实现物理分布式部署(启动LandlordsCore-master\netcoreapp2.0下的app.dll,可以使用bat批处理:dotnet App.dll --appId=AAA --appType=Manager --config=../Config/StartConfig/BBB,如dotnet App.dll --appId=1 --appType=Manager --config=../Config/StartConfig/LandlordsCore.txt)。

方法二:部署时,将需要部署的服务器的服务器IP位置处填上 * 号,在不需要部署的服务器IP处删除*,保存,然后点击启动即可。下图为例图,实际开发中每个物理服务器上最好都加上Manager服务器。

 

一、Actor消息

1. 在协议码类Opcode类添加协议码。

 

2. 在OuterMessage文件中添加消息类。

如果需要序列化添加protobuf序列化标签[ProtoContract]

注册消息标签[Message(Opcode.Frame_ClickMap)]

帧消息继承帧同步抽象类AFrameMessage

添加protobuf属性序列化标签[ProtoMember(int a)],a为唯一

 

3. 添加消息实现类。

添加消息实现标签[MessageHandler((int)Opcode.XX)],XX参数为对应的消息协议码

继承消息实现的抽象类AMHandler<BB>,BB参数为对应消息的消息类,需要序列化则添加protobuf相关标签。此类为消息接收方接收到消息后处理消息的类。

 

4.添加消息转发组件

5.发送消息

通过SessionComponent类中SessionComponent.Instance.Session调用Session中的方法发送消息。

客户端:

服务端:

 

关于ILR的简单使用:

1.ILR中的委托在外部使用时,需在ILHelper类中对委托进行注册委托适配器。(注:委托使用ILR自带的系统委托Action和Func,如果为自定义委托需要写委托转换器,详见ILR官网:https://ourpalm.github.io/ILRuntime/public/v1/guide/delegate.html)

 

2.提高ILR调用外部代码的性能,需进行CLR绑定。

 

3.外部代码是没有办法直接运行一些依赖反射的接口的ILR代码,需进行CLR重定向处理。热更代码调用Unity自带的点击事件等需在ActionHelper类中添加需进行CLR重定向的转换方法,添加之后可自动生成CLR重定向代码。

 

window下Monogod数据库搭建:

1.下载monogod数据库 http://dl.mongodb.org/dl/win32/x86_64。

 

2.zip文件安装或者msi文件解压后,在....../MongoDB/date文件下新建db文件夹,此文件夹为数据库文件夹,如下图。

 

3.如下链接启动数据库https://jingyan.baidu.com/article/d5c4b52bef7268da560dc5f8.html。

 

4.下载NoSQL Manager for MongoDB数据库可视化管理软件并安装。

 

5.一键启动monogod数据库。在....\MongoDB\bin文件夹下放入写有: mongod.exe --dbpath="XXXXXX\MongoDB\Date\db" 的bat文件,XXXXXX为路径。TXT文件写好另存为bat文件。

如:mongod.exe --dbpath="F:\Tools\MongoDB\Date\db"

也可在任意位置放入写有:

set dir=XXXXXX\MongoDB\bin

start "" "%dir%\mongod.exe" --dbpath="XXXXXX\MongoDB\date\db"

其中XXXXXX为路径的bat文件。如:

set dir=F:\Tools\MongoDB\bin

start "" "%dir%\mongod.exe" --dbpath="F:\Tools\MongoDB\date\db"

 

 

 

 

使用小乌龟更新et框架(来自:大空忆)

 

1. 软件下载。

下载、傻瓜式安装。

下载地址:http://download.csdn.net/download/ericwuhk/10141046

安装好后,首先将tortoisegit设置为中文,右键菜单栏TortoiseGit->settings->language选择中文,然后在任意文件下右击,会出现下面图中所示的内容,这样的话就证明你安装好了:

当然,最好不要设置中文,因为下面的展示都是英文。

 

 

2. git上克隆代码。并调整分支

使用git命令行或者上面下载的小乌龟克隆et的矿加代码。

1. 选中工作空间。选中工作的文件夹,右击鼠标,选则Git clone

 

2. 使用复制项目代码的地址。

登录 https://github.com/egametang/ET,复制项目的git地址

 

3. 开始克隆。将上述步骤中的地址https://github.com/egametang/ET.git粘贴到小乌龟中,确认好文件夹点击确定。

 

4. 克隆中…

 

5克隆完成。

 

6新建本地分支。

 

7切换到刚才建好的本地分支

 

 

8.打开项目,巴啦巴拉一顿搞。。。

 

9.提交自己的更新。

 

 

3 更新ET框架

Et框架更新后,可以选择merger的方式将最新的框架代码更新到自己的分支上。

 

1. Fetch拉取文件

 

 

2.选择meger,合并主分支(远程仓库)

 

 

3. 修改代码中冲突的地方。

 

 

附:

1.ET开源框架做完的项目整体部署到Linux服务器的步骤

http://www.tinkingli.com/?p=25

 

2.ET框架:windows/Linux 云服务器部署 https://zhuanlan.zhihu.com/p/33132241

e

 

3.Mac ET 运行指南 作者L(401419353)

 

链接:https://pan.baidu.com/s/1VUQbdd1Yio7ULFXwAv7X7A 密码:l3e3

6

 

4.同步理论文章:https://www.gabrielgambetta.com/client-server-game-architecture.html

 

Tags:

很赞哦! ()

  • 微信收款码
  • 支付宝收款码
打赏

文章评论

站点信息

  • 建站时间:2019-12-11
  • 网站程序:帝国CMS7.5
  • 主题模板《今夕何夕》
  • 文章统计52篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们