
C#
文章平均质量分 78
童小豆子
这个作者很懒,什么都没留下…
展开
-
Unity新版Input System(二)
序言上一篇文章简单介绍了input system的用法。但是真正项目中,肯定还是会用到非常复杂的输入情况的。比如组合按键,长按,短按等等情况。原创 2021-06-01 11:53:58 · 2855 阅读 · 2 评论 -
Unity新版Input System
好久没有关注Unity版本迭代了。。一下缓过来,居然落后时代么。。fuck看看Unity的新版设备输入系统吧。参考文章贴下:《Unity 新 InputSystem 的简要使用》原创 2021-05-30 16:41:40 · 1572 阅读 · 3 评论 -
async,await和TaskCompleteSource的一些疑问
之前看ET框架的时候,发现了一些不理解的地方。其实都是集中在async-await的用法和TaskCompleteSource的用法上的,这会儿就学习了一些。 第一个例子:然后在Main函数中调用TaskCompleteSourceButton_OnClick方法,TaskCompleteSourceButton_OnClick();Console.W...原创 2019-10-26 14:24:25 · 1405 阅读 · 0 评论 -
ET服务端框架学习——ActorLocationSender信使组件
最近在看ET的服务端(5.0版本)框架,突然发现了一点一直搞不太懂。是关于ActorLocationSender组件的。这个类管理一个待发送消息的队列,还有一个ETTaskCompletionSource对象用于获取异步方法的值。该类在初始化后,会遍历队列中的元素,执行发送任务。public static async ETVoid UpdateAsync(this ActorLocation...原创 2019-10-26 11:10:09 · 595 阅读 · 0 评论 -
ET服务端框架学习——消息相关组件
这里要先说明一下ET框架中的消息类型,可以参考这篇文章《ET框架---消息类型浅析》: 1、客户端发送给服务器的消息 C2S 1)不需要与其他服务器通信(普通消息) a、不需要返回结果(普通的普通消息) b、需要返回结果(普通的RPC消息)...原创 2019-04-08 16:44:52 · 1314 阅读 · 0 评论 -
ET框架学习——消息系统之二
AChannel AChannel类继承自ComponentWithId。内部保存了一些和网络传输相关的字段(AService,IPEndPoint等),还有两个委托Action<AChannel, int> errorCallback和Action<MemoryStream> readCallback。这两个委托和消息传输的结果相关,分别用于保存错...原创 2019-02-19 16:23:15 · 1124 阅读 · 0 评论 -
ET框架学习——消息系统之三
鉴于我之前对于游戏的网络开发部分没有经验。后面关于ET消息系统的学习都将参考这位朋友Norman_Lin的博客来学习。后面会自己再来调整文章的顺序,结构等。 CircularBuffer 这个应该是ET框架中消息相关的类,继承自Stream类。ChunkSize字段的代表一个字节数组的最大长度。后面两个队列应该是用于存储消息流的。public int Ch...原创 2019-02-26 19:30:49 · 1104 阅读 · 0 评论 -
ET框架学习——ConfigComponent组件和ACategory<T>类
ACategory<T>类 ACategory<T>抽象类继承自ACategory类,T实现接口IConfigpublic abstract class ACategory : Object{ public abstract Type ConfigType { get; } public abstract IConfig GetOne();...原创 2019-02-06 17:17:06 · 556 阅读 · 0 评论 -
ET框架学习——消息系统之一
OpcodeTypeComponent组件和MessageDispatherComponent组件都是消息系统的组成部分。这里就来好好捋一捋ET的消息系统。从我目前看到现在来说,这个消息系统包括一系列的事件接口,特性,和消息类型的识别码等等部分,这里先撇开前后端通讯部分的消息。 消息系统中的抽象类,接口 public interface IMHandler{ void...原创 2019-01-23 16:49:55 · 2156 阅读 · 0 评论 -
ET框架学习——OpcodeTypeComponent组件和MessageDispatherComponent组件
OpcodeTypeComponent OpcodeTypeComponent组件接入了Awake和Load两个事件,会在事件系统收集反射信息和该组件被创建时,执行Load方法。 该类中维护了一个字典Dictionary<ushort, object> typeMessages和一个DoubleMap<ushort, Type> opc...原创 2019-01-23 11:25:50 · 1224 阅读 · 0 评论 -
ET框架学习——UIComponent组件和UI组件
UI组件继承自Entity,接通了Awake事件,执行Awake方法。内部维护了一个GameObject和一个Dictionary<string, UI> children字典。 Awake(GameObject gameObject)方法,会清空字典,并且给GameObject赋值。 内部还有三个对字典操作的方法。Add(UI ui)方法向字典中添加元素...原创 2019-02-06 13:07:19 · 2054 阅读 · 0 评论 -
AssetBundle详解
学习一下AssetBundle相关的知识。 打包 关于Assetbundle相关的API,可以参考Unity的官方文档(点击这里) 。关于打包的API,官方使用的是BuildPipeline类中的BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, Buil...原创 2019-01-08 10:46:44 · 2107 阅读 · 0 评论 -
ET框架学习——消息系统之四
这篇讲一下AChannel基类和其相关的派生类。AChannel类看名字应该是频道的意思,看代码是和消息内容相关的类。 AChannel 关于AChannel在我之前的文章里面有讲到过,大家可以看这里。 内容不是很多,主要是定义了两个事件,用于放置回调方法。还有和这两个事件相关的调用方法。以及一些其他。 KChannel 框架中有3个Chan...原创 2019-03-01 17:33:45 · 2213 阅读 · 0 评论 -
ET框架学习——消息系统之五
上一篇文章简单学习了一下AChannel和对应的派生类。这里来学习和Channel对应的Server相关的类 和Channel一样,Server也是对应一个基类AServer和派生类。并且派生类也是对应TCP,KCP和WebSocket三个。KCP和WebSocket都相对来说比较陌生。这里只看一下TServer相关的内容。 AServer ...原创 2019-03-03 17:35:08 · 1239 阅读 · 0 评论 -
ET框架学习——消息系统之六
本篇讲解下NetworkComponent组件,框架在初始化的时候,挂载的是NetOuterComponent组件,该组件继承自NetworkComponent组件,内部指定了使用了网络协议为TCP。 NetworkComponent Dictionary<long, Session> sessions字典,存放的是使用到的和Channel相关的Se...原创 2019-03-06 10:48:00 · 1220 阅读 · 0 评论 -
ET框架学习——消息系统之七,从init走一遍网络消息
网络组件创建 ET中的网路组件在客户端就是NetOuterComponent,当然,这是包装过的。这里面只是指定了所使用的网络类型,demo中默认使用的是TCP类型的网络。这里使用的组件工厂添加组件,所以会默认执行Awake事件。 NetOuterComponent组件的Awake事件是定义在类NetOuterComponentAwakeSyst...原创 2019-03-30 16:18:27 · 1395 阅读 · 0 评论 -
ET服务端框架学习——服务端入口
ET框架有一个好处就是很多组件在客户端和服务端几乎都是可以通用的。比如EventSystem组件,和在客户端是一样的使用逻辑,具体可以看这篇文章《ET框架学习——EventSystem类》。 在加载完服务端的Hotfix和Model的dll后,开始后面就是开始读取服务端的配置,并根据配置加载相应的组件。服务端的配置的读取方法使用的是CommandLine,该类用于...原创 2019-04-03 15:10:08 · 3234 阅读 · 2 评论 -
ET服务端框架学习——寻路demo
这里用master版本的寻路来学习一下ET的服务端,ET的寻路部分是放在服务端计算的,然后将路径的点集发送到客户端,有客户端具体执行移动命令。 在此之前,先来看看ET客户端的关于寻路部分的demo。 UnitPathComponent组件 该组件是执行寻路移动的核心组件之一。 该组件没有接通事件系统。StartMove(M2C_Pathfind...原创 2019-04-24 17:37:30 · 1606 阅读 · 2 评论 -
ET框架学习——消息系统之七
最近一直在搞这个消息流转路径,做了几张图:Connect&ReciveSend数据包装变化原创 2019-08-19 10:21:12 · 469 阅读 · 1 评论 -
使用FileStream读写文件
大文件读取最近在网上爬了一个使用FileStream来读取文件的内容的代码:public StringBuilder ReadDataFromFile(string fileName){ StringBuilder str = new StringBuilder(); using (FileStream file = new FileStrea...原创 2019-09-26 21:23:52 · 783 阅读 · 0 评论 -
项目图集优化之一
项目中的图集已经优化了很多了。我目前的工作是看看还有没有可以优化的空间。当然这项工作目前还在做。在开始这项工作之前,做了一些准备工作——数据的采集。我的思路是,不管后面要如何动手,先要了解项目中图集的一些基本数据,例如:图集的引用情况,图集的大小等等。当然,具体需要什么数据,也是不断在完善过程中的。就像我,光是数据的采集就改了三版。所以,经验确实很重要。 写了一个小工具...原创 2019-09-27 11:41:46 · 425 阅读 · 0 评论 -
ILRuntime学习(之五)
第7个例子讲解的是使用协程。在热更工程中使用协程已经属于跨域继承的范围了(使用Couroutine时,C#编译器会自动生成一个实现了IEnumerator,IEnumerator<object>,IDisposable接口的类,)。所以需要注册适配器才可以。 第8个例子是在热更工程是使用MonoBehaviour类。同样的,我们需要注册适配器。这里实例做了...原创 2018-12-18 17:40:16 · 1469 阅读 · 0 评论 -
ILRuntime学习(之四)
第5个例子讲解是重定向,原理按照官网的说法是:当IL解译器发现需要调用某个指定CLR方法时,将实际调用重定向到另外一个方法进行挟持,再在这个方法中对ILRuntime的反射的用法进行处理。例如new方法就是不能直接用的,要进行重定向才可以。例子中举了Debug.Log这个情况,比如我们在DLL里调用Debug.Log,默认情况下是无法显示DLL内堆栈的,但是经过CLR重定向之后可以做...原创 2018-12-17 19:25:23 · 2011 阅读 · 1 评论 -
tolua框架学习(之四)
第四个案例讲的如何获取lua中的变量的几种情况。 1、我们可以使用“[]”操作来获取lua中的变量。在LuaState中定义了"[]"操作符。注意,lua片段必须被载入才能被读取到,具体到本例,就是调用DoString()方法,否则读取到变量为空。本例中一开始设置了一个变量的值,这里涉及了"[]"操作符的set操作。set操作中,对于要获取的lua变量分了两种操作,一种就是全...原创 2018-10-23 20:40:11 · 887 阅读 · 0 评论 -
Tolua框架学习之一——LuaInterface
文章参考来源:https://blog.youkuaiyun.com/heyuchang666/article/details/50722658 LuaInterface.Lua类是CLR访问Lua解释器的主要接口,一个LuaInterface.Lua类对象就代表了一个Lua解释器(或Lua执行环境),Lua解释器可以同时存在多个,并且它们之间是完全相互独立的。简单...转载 2018-10-16 20:53:35 · 3285 阅读 · 0 评论 -
ET框架学习——TimerComponent类和有序MultiMap类
Game类中总共有4个实例对象:Scene对象, EventSystem对象,ObjectPool对象,Hotfix对象。Scene对象实例化成为单例,实例是,会默认添加一个TimerComponent组件。 MultiMap<T, K> MultiMap<T, K> 泛型类,是一个自定义的数据结构。内部是基于SortedDicti...原创 2018-08-29 19:53:34 · 801 阅读 · 0 评论 -
ET框架学习——ResourceComponent资源管理组件
ABInfo类 ResourceComponent组件涉及到几个类——ABInfo(AB资源信息?)和AssetBundleHelper这两个类。ABInfo继承自Component,维护三个字段,一个int类型的refCount属性,(应该是用于依赖计数的?),一个string的Name属性, 一个AssetBundle资源字段。构造函数接受一个名字和ab包资源...原创 2018-08-31 17:38:58 · 1556 阅读 · 0 评论 -
ET框架学习——配置(表)相关类(JsonHelper,ConfigHelper,GlobalProto)
GlobalConfigComponent类内容不多,一个GlobalProto类型字段,一个Awake方法,Awake方法也是加到了事件系统中去了,在Unity运行时,会统一走Awake方法。 ConfigHelper类的静态方法GetGlobal返回的是GlobalProto.text文档中的内容。如下:两个地址GetGlobal方法中, Reso...原创 2018-08-30 21:12:48 · 1104 阅读 · 0 评论 -
ET框架学习——EventSystem类
EventSysterm类中维护了许多字典和队列,如下: UnOrderMultiMap是无序的MultMap字典,可以参见之前的文章。 IEvent接口内部提供的是四个重载的Handler方法。IAwakeSystem接口提供一个Type返回值的方法,返回继承该接口的泛型类型。IStartSystem接口和IAwakeSystem接口类似,不过...原创 2018-08-30 16:15:57 · 1935 阅读 · 0 评论 -
ET框架学习——Component基类和几个派生类,管理类
Init类是ET框架接触的第二个脚本。该类开始就设置了一个SynchronizationContext对象。 SynchronizationContext类是用于多线程之间通信的一个类,其在通讯中充当了个传输者的角色(详情可以参看这篇文章)。OneThreadSynchronizationContext类继承自SynchronizationContext。内部维护了一个Co...原创 2018-08-17 15:23:19 · 1749 阅读 · 0 评论 -
ET框架学习——ReferenceCollector类
ReferenceCollector类 看这个类在inspector中的表现,猜想这个类应该有引用对象的功能。 ReferenceCollectorData类序列化了一个名字key和object对象。就是对应上面的"LobbyCanvas"和LobbyCanvas对象。这个类有Serializable特性,所以该类是可以被序列化的。 Ref...原创 2018-08-16 11:34:57 · 4401 阅读 · 0 评论 -
循环链表的小效果
今天在做UGUI的ScrollView的无限滚动效果,一开始想错了逻辑,不过误打误撞实现了一种小效果(虽然目前还不知道用在哪儿。。。)。这种效果类似于咬尾蛇的那种,每个元素的移动都会引起链式效应,使得其他元素一起移动。具体效果如下:可以看到,00~04的cell乡下移动时,最末尾的016~019的cell补位到原先00~04的位置,而05~015则顺次向下移动。 在做...原创 2018-04-27 12:47:25 · 453 阅读 · 0 评论 -
tolua框架学习(二)
这里是从tolua的案例开始学习的。 tolua的第一的案例就是Hello World。代码很简单。tolua的使用分为三步: 1、实例化一个lua虚拟机,这里就是new一个LuaState对象,通过Start()方法启动虚拟机。启动方法,设置了一系列的属性值。这里的LuaState就相当于LuaInterface中的Lua类,只不过要复杂很多。 ...原创 2018-10-20 22:56:12 · 1371 阅读 · 0 评论 -
tolua框架学习(六)
本例讲解的是在lua中使用C#中的数组。lua代码片段中,大体上涉及了: 1、获取数组的长度, 2、获取数组的元素, 3、迭代数组,转化数组为table, 4、查找指定元素, 5、获取指定元素的序号等等。 获取到function后,调用该方法。本例中将调用步骤拆开了:a、调用BeginPCall()...原创 2018-10-25 11:01:21 · 779 阅读 · 0 评论 -
tolua框架学习(之三)
第三个案例讲的是调用lua中的函数方法。核心方法就是luaState中的GetFunction()方法。该方法会先从funcMap这个字典中查找对应的方法对象,有的话,并且该方法仍然处于非游离状态(IsAlive),就会返回该方法,并且从GC列表中删除该方法。否者就会从funcMap中删除该方法对象。否则,会通过PushLuaFunction方法获取对象。该方法同样也会先在fu...原创 2018-10-21 16:40:42 · 1316 阅读 · 0 评论 -
ILRuntime学习(之三)
第三个例子讲解是继承的问题。Hotfix_Projiect工程中的类继承了TestClassBase,而该类是定义在Unity主工程中的。例子还特意做了注解:Hotfix_Projict中的类只允许继承有1个Unity主工程的类或者接口,但是可以有随便多少个热更DLL中的接口。 使用Instantiate()方法创建热更工程中的类。由于该类是子类,所以使用了重载方法...原创 2018-12-08 16:49:14 · 1791 阅读 · 0 评论 -
ILRuntime学习(之一)
最近在学习ET框架,然后被群友告知,要先学ILRuntime。行吧,谁让咱是小白呢。。。。。 ILRuntime的学习资料我是参考的github上的教程https://ourpalm.github.io/ILRuntime/public/v1/guide/index.html和上面贴出来印象笔记(点击此处)。使用的Demo也是配套的,代码上面有很多注释。这次的学习目的...原创 2018-12-05 20:19:02 · 2780 阅读 · 0 评论 -
ILRuntime学习(之二)
第三个例子讲解是使用委托。使用dll内部的委托是不需要做处理的,可以直接使用。但是,如果dll中使用的委托是定义在UnityEngine等unity命名空间下的,则需要做一些注册处理。 HotFix_Project工程中使用了三个定义在例子中的委托,这些委托在unity工程中是没有办法读取到的。为此,我们需要给这些委托注册适配器。对于同一个参数组合的委托,只需要...原创 2018-12-07 19:59:19 · 1279 阅读 · 0 评论 -
tolua框架学习(十)
lua中对int64的使用 案例16讲的是lua中对int64的使用。lua5.1.x都是不支持int64和uint64的。Lua5.3已经支持了这两种数据类型。lua片段中有一些对int64进行处理的函数: a、int64.tonum2(x) tonum2会返回两个数,第二个数高位是右移32位的值,第一个数低位是剩下的值(&0xFF...原创 2018-11-06 16:00:06 · 1173 阅读 · 0 评论 -
tolua框架学习(十一)
AssetBundle测试 案例18讲的是对于加载AB包的测试。整个过程模拟的加载资源,然后进入lua主入口的过程。获取到AB资源后,按照资源数量,获取到资源后,添加到LuaFileUtils内部保存的字典中去。最后启动lua主入口。 使用json 案例19将的是使用json。 关于json的简单介绍可以参考这篇文章。本例的lua片段中req...原创 2018-11-13 11:00:50 · 464 阅读 · 0 评论