- 博客(53)
- 问答 (1)
- 收藏
- 关注
原创 Unity新版Input System(二)
序言上一篇文章简单介绍了input system的用法。但是真正项目中,肯定还是会用到非常复杂的输入情况的。比如组合按键,长按,短按等等情况。
2021-06-01 11:53:58
2839
2
原创 Unity新版Input System
好久没有关注Unity版本迭代了。。一下缓过来,居然落后时代么。。fuck看看Unity的新版设备输入系统吧。参考文章贴下:《Unity 新 InputSystem 的简要使用》
2021-05-30 16:41:40
1562
3
原创 Unity中AssetDatabase相关的笔记(坑)
如果在编辑器模式下,需要加载资源,除了使用assetbundle外,更方便的是使用Resource.Load和AssetDatabase这个类。相比较而言,AssetDatabase类在编辑器模式下,更易操作。当然,这个类不仅仅只是用于资源的加载。 本篇列举了一些关于AeestDatabase类的一些用法和坑(长期更新) 1、资源加载 使用A...
2019-12-24 21:04:36
2972
原创 Unity渲染基础——Mesh原理
这片文章其实是综合了我之前看过的几篇文章,然后汇总了一下。参看文章贴在文末。涉猎到相关的内容是之前学习换装的时候,作者将skinmeshrenderer中的mesh数据显示到了ui上,从而实现了在UI上显示模型的需求。 Unity中想要显示一个3D模式,必须要知道该模式的形状,这个形状其实就是mesh数据。有了mesh数据后,再通过Mesh Filter组件将mesh...
2019-11-24 16:07:13
4268
原创 async,await和TaskCompleteSource的一些疑问
之前看ET框架的时候,发现了一些不理解的地方。其实都是集中在async-await的用法和TaskCompleteSource的用法上的,这会儿就学习了一些。 第一个例子:然后在Main函数中调用TaskCompleteSourceButton_OnClick方法,TaskCompleteSourceButton_OnClick();Console.W...
2019-10-26 14:24:25
1400
原创 ET服务端框架学习——ActorLocationSender信使组件
最近在看ET的服务端(5.0版本)框架,突然发现了一点一直搞不太懂。是关于ActorLocationSender组件的。这个类管理一个待发送消息的队列,还有一个ETTaskCompletionSource对象用于获取异步方法的值。该类在初始化后,会遍历队列中的元素,执行发送任务。public static async ETVoid UpdateAsync(this ActorLocation...
2019-10-26 11:10:09
583
原创 项目图集优化之一
项目中的图集已经优化了很多了。我目前的工作是看看还有没有可以优化的空间。当然这项工作目前还在做。在开始这项工作之前,做了一些准备工作——数据的采集。我的思路是,不管后面要如何动手,先要了解项目中图集的一些基本数据,例如:图集的引用情况,图集的大小等等。当然,具体需要什么数据,也是不断在完善过程中的。就像我,光是数据的采集就改了三版。所以,经验确实很重要。 写了一个小工具...
2019-09-27 11:41:46
423
原创 使用FileStream读写文件
大文件读取最近在网上爬了一个使用FileStream来读取文件的内容的代码:public StringBuilder ReadDataFromFile(string fileName){ StringBuilder str = new StringBuilder(); using (FileStream file = new FileStrea...
2019-09-26 21:23:52
778
原创 ET服务端框架学习——寻路demo
这里用master版本的寻路来学习一下ET的服务端,ET的寻路部分是放在服务端计算的,然后将路径的点集发送到客户端,有客户端具体执行移动命令。 在此之前,先来看看ET客户端的关于寻路部分的demo。 UnitPathComponent组件 该组件是执行寻路移动的核心组件之一。 该组件没有接通事件系统。StartMove(M2C_Pathfind...
2019-04-24 17:37:30
1597
2
原创 ET服务端框架学习——消息相关组件
这里要先说明一下ET框架中的消息类型,可以参考这篇文章《ET框架---消息类型浅析》: 1、客户端发送给服务器的消息 C2S 1)不需要与其他服务器通信(普通消息) a、不需要返回结果(普通的普通消息) b、需要返回结果(普通的RPC消息)...
2019-04-08 16:44:52
1303
原创 ET服务端框架学习——服务端入口
ET框架有一个好处就是很多组件在客户端和服务端几乎都是可以通用的。比如EventSystem组件,和在客户端是一样的使用逻辑,具体可以看这篇文章《ET框架学习——EventSystem类》。 在加载完服务端的Hotfix和Model的dll后,开始后面就是开始读取服务端的配置,并根据配置加载相应的组件。服务端的配置的读取方法使用的是CommandLine,该类用于...
2019-04-03 15:10:08
3227
2
原创 ET框架学习——消息系统之七,从init走一遍网络消息
网络组件创建 ET中的网路组件在客户端就是NetOuterComponent,当然,这是包装过的。这里面只是指定了所使用的网络类型,demo中默认使用的是TCP类型的网络。这里使用的组件工厂添加组件,所以会默认执行Awake事件。 NetOuterComponent组件的Awake事件是定义在类NetOuterComponentAwakeSyst...
2019-03-30 16:18:27
1382
原创 行为树学习(之一)
首先可以看看这篇文章,这里面详细介绍了关于BehaviourTree中的各个节点的详细意义。这里还有一篇文章,是官方文档的翻译,也可以学习一下,不过这里面有一个很关键的点没有说清楚,就是关于共享变量的设置,具体可以看看这篇文章,里面有详细的设置过程。这算是一个坑吧。具体步骤我也贴出来了,如下图所示:我要共享的变量是SharedTransform,所以选择Transform类...
2019-03-22 14:54:52
653
原创 ET框架学习——消息系统之六
本篇讲解下NetworkComponent组件,框架在初始化的时候,挂载的是NetOuterComponent组件,该组件继承自NetworkComponent组件,内部指定了使用了网络协议为TCP。 NetworkComponent Dictionary<long, Session> sessions字典,存放的是使用到的和Channel相关的Se...
2019-03-06 10:48:00
1212
1
原创 ET框架学习——消息系统之五
上一篇文章简单学习了一下AChannel和对应的派生类。这里来学习和Channel对应的Server相关的类 和Channel一样,Server也是对应一个基类AServer和派生类。并且派生类也是对应TCP,KCP和WebSocket三个。KCP和WebSocket都相对来说比较陌生。这里只看一下TServer相关的内容。 AServer ...
2019-03-03 17:35:08
1231
原创 ET框架学习——消息系统之四
这篇讲一下AChannel基类和其相关的派生类。AChannel类看名字应该是频道的意思,看代码是和消息内容相关的类。 AChannel 关于AChannel在我之前的文章里面有讲到过,大家可以看这里。 内容不是很多,主要是定义了两个事件,用于放置回调方法。还有和这两个事件相关的调用方法。以及一些其他。 KChannel 框架中有3个Chan...
2019-03-01 17:33:45
2197
原创 ET框架学习——消息系统之三
鉴于我之前对于游戏的网络开发部分没有经验。后面关于ET消息系统的学习都将参考这位朋友Norman_Lin的博客来学习。后面会自己再来调整文章的顺序,结构等。 CircularBuffer 这个应该是ET框架中消息相关的类,继承自Stream类。ChunkSize字段的代表一个字节数组的最大长度。后面两个队列应该是用于存储消息流的。public int Ch...
2019-02-26 19:30:49
1099
原创 ET框架学习——消息系统之二
AChannel AChannel类继承自ComponentWithId。内部保存了一些和网络传输相关的字段(AService,IPEndPoint等),还有两个委托Action<AChannel, int> errorCallback和Action<MemoryStream> readCallback。这两个委托和消息传输的结果相关,分别用于保存错...
2019-02-19 16:23:15
1113
原创 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
549
原创 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
2043
原创 ET框架学习——消息系统之一
OpcodeTypeComponent组件和MessageDispatherComponent组件都是消息系统的组成部分。这里就来好好捋一捋ET的消息系统。从我目前看到现在来说,这个消息系统包括一系列的事件接口,特性,和消息类型的识别码等等部分,这里先撇开前后端通讯部分的消息。 消息系统中的抽象类,接口 public interface IMHandler{ void...
2019-01-23 16:49:55
2147
原创 ET框架学习——OpcodeTypeComponent组件和MessageDispatherComponent组件
OpcodeTypeComponent OpcodeTypeComponent组件接入了Awake和Load两个事件,会在事件系统收集反射信息和该组件被创建时,执行Load方法。 该类中维护了一个字典Dictionary<ushort, object> typeMessages和一个DoubleMap<ushort, Type> opc...
2019-01-23 11:25:50
1220
原创 AssetBundle详解
学习一下AssetBundle相关的知识。 打包 关于Assetbundle相关的API,可以参考Unity的官方文档(点击这里) 。关于打包的API,官方使用的是BuildPipeline类中的BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, Buil...
2019-01-08 10:46:44
2097
原创 ILRuntime学习(之五)
第7个例子讲解的是使用协程。在热更工程中使用协程已经属于跨域继承的范围了(使用Couroutine时,C#编译器会自动生成一个实现了IEnumerator,IEnumerator<object>,IDisposable接口的类,)。所以需要注册适配器才可以。 第8个例子是在热更工程是使用MonoBehaviour类。同样的,我们需要注册适配器。这里实例做了...
2018-12-18 17:40:16
1464
原创 ILRuntime学习(之四)
第5个例子讲解是重定向,原理按照官网的说法是:当IL解译器发现需要调用某个指定CLR方法时,将实际调用重定向到另外一个方法进行挟持,再在这个方法中对ILRuntime的反射的用法进行处理。例如new方法就是不能直接用的,要进行重定向才可以。例子中举了Debug.Log这个情况,比如我们在DLL里调用Debug.Log,默认情况下是无法显示DLL内堆栈的,但是经过CLR重定向之后可以做...
2018-12-17 19:25:23
2001
1
原创 ILRuntime学习(之三)
第三个例子讲解是继承的问题。Hotfix_Projiect工程中的类继承了TestClassBase,而该类是定义在Unity主工程中的。例子还特意做了注解:Hotfix_Projict中的类只允许继承有1个Unity主工程的类或者接口,但是可以有随便多少个热更DLL中的接口。 使用Instantiate()方法创建热更工程中的类。由于该类是子类,所以使用了重载方法...
2018-12-08 16:49:14
1785
原创 ILRuntime学习(之二)
第三个例子讲解是使用委托。使用dll内部的委托是不需要做处理的,可以直接使用。但是,如果dll中使用的委托是定义在UnityEngine等unity命名空间下的,则需要做一些注册处理。 HotFix_Project工程中使用了三个定义在例子中的委托,这些委托在unity工程中是没有办法读取到的。为此,我们需要给这些委托注册适配器。对于同一个参数组合的委托,只需要...
2018-12-07 19:59:19
1270
原创 ILRuntime学习(之一)
最近在学习ET框架,然后被群友告知,要先学ILRuntime。行吧,谁让咱是小白呢。。。。。 ILRuntime的学习资料我是参考的github上的教程https://ourpalm.github.io/ILRuntime/public/v1/guide/index.html和上面贴出来印象笔记(点击此处)。使用的Demo也是配套的,代码上面有很多注释。这次的学习目的...
2018-12-05 20:19:02
2776
原创 tolua框架学习(十二)
文章使用的tolua框架是LuaFramework_UGUI-1.0.4.109。可以在github上下载。这里主要是讨论下使用tolua进行热更。参考的文章是罗培羽作者所写的文章(点击此处)。不过经过我的实践后,发现有很多地方是没有办法实现的,总是会有这样或者那样的问题。所以,这篇文章只是解决了其中的一部分问题,但是,使用tolua进行代码热更,还是没有实现。 按照...
2018-11-30 17:33:31
642
原创 tolua框架学习(十一)
AssetBundle测试 案例18讲的是对于加载AB包的测试。整个过程模拟的加载资源,然后进入lua主入口的过程。获取到AB资源后,按照资源数量,获取到资源后,添加到LuaFileUtils内部保存的字典中去。最后启动lua主入口。 使用json 案例19将的是使用json。 关于json的简单介绍可以参考这篇文章。本例的lua片段中req...
2018-11-13 11:00:50
451
原创 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
1162
原创 tolua框架学习(九)
在lua中使用输出函数 案例14讲的是在lua中使用输出函数。lua片断是一个测试射线的方法,在调用.Physics.Raycast()时,返回了两个变量,一个bool值,一个hit。将原本C#中的输出参数变成了返回值直接返回。调用方法和其他的一样处理。值得注意的一点是:输出参数在lua中是不需要传参的,传递nil即可,这一点可以参见我在luaInterface中的测试(点...
2018-10-29 19:58:26
836
原创 tolua框架学习(八)
第12个案例,讲解的是在lua中对Unity中的一些类的使用,比如Color,GameObject,ParticleSystem等。这里是直接通过UnityEngine命名空间获取了该类,可以通过对应的命名空间+类名在lua获取该类。如通过 UnityEngine.UI.Image,可以获取Image类。在lua中创建一个gameObject使用的方法是:GameObject('g...
2018-10-27 17:38:00
383
原创 tolua框架学习(七)
案例9,讲解的是在lua中使用C#字典。lua片段中涉及到了迭代字典,获取指定键的值,删除键值对等操作。本示例基本和之前讲解数组的案例差不多。而后面一个案例10讲解的是使用枚举,使用步骤都是差不过的。这两个例子唯一不同的地方是Build部分,枚举的例子是直接调用的LuaBuilder.Build()方法,而字典的例子则是自定义写的一个Build方法,里面有很多注册的资源都是LuaBui...
2018-10-26 22:48:08
519
原创 tolua框架学习(六)
本例讲解的是在lua中使用C#中的数组。lua代码片段中,大体上涉及了: 1、获取数组的长度, 2、获取数组的元素, 3、迭代数组,转化数组为table, 4、查找指定元素, 5、获取指定元素的序号等等。 获取到function后,调用该方法。本例中将调用步骤拆开了:a、调用BeginPCall()...
2018-10-25 11:01:21
770
原创 tolua框架学习(五)
本例讲解了在lua中使用协程。创建了三个变量,其中,luaFile是lua指的是lua脚本。looper应该是和协程相关的对象。实例化了一个LuaResLoader()对象,但是没有变量来接收该对象,很奇怪。。LuaResLoader继承自LuaFileUtils。初始化了LuaFileUtils中的几个字段。其中searchPath是查找文件的路径,zipMap是AB资源包...
2018-10-24 15:52:12
1429
原创 tolua框架学习(之四)
第四个案例讲的如何获取lua中的变量的几种情况。 1、我们可以使用“[]”操作来获取lua中的变量。在LuaState中定义了"[]"操作符。注意,lua片段必须被载入才能被读取到,具体到本例,就是调用DoString()方法,否则读取到变量为空。本例中一开始设置了一个变量的值,这里涉及了"[]"操作符的set操作。set操作中,对于要获取的lua变量分了两种操作,一种就是全...
2018-10-23 20:40:11
882
原创 tolua框架学习(之三)
第三个案例讲的是调用lua中的函数方法。核心方法就是luaState中的GetFunction()方法。该方法会先从funcMap这个字典中查找对应的方法对象,有的话,并且该方法仍然处于非游离状态(IsAlive),就会返回该方法,并且从GC列表中删除该方法。否者就会从funcMap中删除该方法对象。否则,会通过PushLuaFunction方法获取对象。该方法同样也会先在fu...
2018-10-21 16:40:42
1309
原创 tolua框架学习(二)
这里是从tolua的案例开始学习的。 tolua的第一的案例就是Hello World。代码很简单。tolua的使用分为三步: 1、实例化一个lua虚拟机,这里就是new一个LuaState对象,通过Start()方法启动虚拟机。启动方法,设置了一系列的属性值。这里的LuaState就相当于LuaInterface中的Lua类,只不过要复杂很多。 ...
2018-10-20 22:56:12
1366
空空如也
刚体代码添加到transform数据类型问题
2017-05-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人