- 博客(224)
- 收藏
- 关注
原创 C# 实现Lru缓存
代码实现的基本原理就是使用链表,当某个元素被访问时(Get或Set)就将该元素放到链表的头部或者尾部(根据用户自己定义规则即可)当达到了缓存的最大容量时对最不常使用的元素进行移除(移除的时候可以定义一系列的规则,用于判读如何移除,是否移除)LRU 算法全称是最近最少使用算法(Least Recently Use),是一种简单的缓存策略。通常用在对象池等需要频繁获取但是又需要释放不用的地方。下面直接贴出来代码供大家参考。
2023-12-09 09:19:12
513
原创 分享一个看到的有意思的对象池(灵活对象池)
相比于传统的对象池中的对象是拿到对象之后在另外的脚本中书写逻辑,能不能给对象池中的对象都创建一个基类,创建回收或者销毁都在该池子中实现呢,并且一般的对象池不能去使用Unity常规API进行销毁其中的对象只有回收和释放,能不能有一种更自由的方式呢,根据不同的项目进行取舍即可没有最优只有最适合的方式。
2023-10-10 18:31:19
285
原创 Unity实现设计模式——适配器模式
适配器模式又称为变压器模式、包装模式(Wrapper) 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。在一个在役的项目期望在原有接口的基础上拓展,那么适配器模式是最适合的。即需要使用一个已有或新建的类,但这个类又不符合系统的接口,则可以使用适配器模式。client:需要使用适配器的对象,不需要关心适配器内部的实现,只对接目标角色。Target:目标角色,和client直接对接,定义了client需要用到的功能。
2023-10-09 09:49:12
592
原创 Unity实现设计模式——访问者模式
访问者模式(Vistor Pattern)是一种将数据结构和数据操作分离的设计模式。是指封装一些作用于某种数据结构中的各种元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作。访问者模式的基本思想是针对系统中拥有的某些固定类型的对象结构(元素),在其内部提供一个accept()方法用来接受访问者对象的访问。不同的访问者对同一元素的访问内容不同,所以使得相同的元素可以产生不同的元素结果。就是说不同的访问者访问同一个对象里面的不同属性,产生了不同的结果。
2023-10-08 15:51:52
558
原创 Unity实现设计模式——模板方法模式
模板模式(Template Pattern), 指在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。简单说, 模板方法模式定义一个操作中的算法的骨架,而将这些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。
2023-10-08 15:23:51
576
原创 Unity实现设计模式——策略模式
策略模式是一种定义一些列算法的方法,这些所有的算法都是完成相同的工作,只是实现不同。它可以通过相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。策略模式的 Strategy 类层次为 Context 定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。需要注意的是策略模式与工厂模式的区别简单工
2023-10-08 14:55:24
382
原创 Unity实现设计模式——备忘录模式
它可以在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要的时候恢复到原先保存的状态。源发器(Originator):需要保存和恢复状态的对象。它创建一个备忘录对象,用于存储当前对象的状态,也可以使用备忘录对象恢复自身的状态。备忘录(Memento):存储源发器对象的状态。备忘录对象可以包括一个或多个状态属性,源发器可以根据需要保存和恢复状态。管理者(Caretaker):负责保存备忘录对象,但不能修改备忘录对象的内容。
2023-10-08 14:29:47
490
原创 Unity实现设计模式——迭代器模式
迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。抽象迭代器(Iterator):定义了遍历聚合对象所需的方法,包括hashNext()和next()方法等,用于遍历聚合对象中的元素。具体迭代器(Concrete Iterator):它是实现迭代器接口的具体实现类,负责具体的遍历逻辑。它保存了当前遍历的位置信息,并可以根据需要向前或向后遍历集合元素。
2023-10-07 19:30:36
509
原创 Unity实现设计模式——解释器模式
解释器模式(Interpreter Pattern)是一种按照规定语法进行解析的模式,现实项目中用得较少。给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。下面用一个例子演示:将罗马文字转换为十进制的格式。
2023-09-29 10:40:53
669
原创 Unity实现设计模式——责任链模式
责任链模式定义:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。在职责链模式中,多个处理器(也就是刚刚定义中说的“接收对象”)依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完后再传递给C处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式。这里使用管理者、副总裁、总裁、依次采购商品的例子。
2023-09-28 16:33:16
1444
原创 Unity实现设计模式——状态模式
状态模式最核心的设计思路就是将对象的状态抽象出一个接口,然后根据它的不同状态封装其行为,这样就可以实现状态和行为的绑定,最终实现对象和状态的有效解耦。在实际开发中一般用到FSM有限状态机的实现,GF框架中的FSM和流程控制就是基于这个原理实现的。
2023-09-27 09:29:56
1742
原创 Unity实现设计模式——命令模式
命令模式使得请求的发送者与请求的执行者之间消除耦合,让对象之间的调用关系更加灵活。在命令模式中,会将一个命令封装成一个对象,同时命令模式也支持可撤销的操作。命令里面通常聚合接收者,初始化命令时传入接收者,调用者直接调用命令即可。
2023-09-26 10:42:14
525
原创 C# 一些工具集优化使用(String,Random,Assembly,Json)
日常开发中会有大量时间接触例如:字符串、随机数、程序集、json等的场景,像字符串使用不当就会产生大量的GC通过封装一些静态的工具方法对这些常用的地方进行适当简单优化。
2023-09-11 10:38:21
339
原创 C# Unity FSM 状态机
使用状态机可以降低代码耦合性,并且可以优化代码可读性,方便团队协作等。对于游戏开发内容来讲游戏开发的流程控制玩家动画都可以使用FSM有限状态机来实现。
2023-09-08 17:00:02
1213
原创 Unity 时间定时调度系统
之前的文章也有写过时间调度系统,但是没有支持异步调度只有回调调度,而且效率和代码可读性不是很好,下面介绍一种更优质的时间调度系统。
2023-09-06 10:24:55
1082
原创 EventSystem 事件系统
事件系统在开发中必不可少事件系统使用观察者模式可以极大程度降低程序的耦合,之前的文章也讲过事件系统但是不够高效简洁,如何轻便高效优雅的实现一个事件呢?依然基于之前的和进行开发,主要原理也是根据反射去获取事件的接口使用反射进行实例化处理类,而非人工手动订阅事件。
2023-09-02 10:02:16
773
1
原创 SingletonSystem 单例管理系统
单例模式是项目中最为常见的设计模式之一,但是写法都不够优雅不方便查找和管理,下面介绍一种使用反射实现的单例管理架构
2023-09-01 14:05:14
244
1
原创 AssemblyManager 程序集管理器
程序执行中使用反射对框架的搭建有着强大的影响,如何管理程序集方便使用反射获取类型操作对象是本文章的重点。
2023-08-30 19:31:41
231
原创 C# Unity 一个Key对应多个值的字典
C# 中没有提供一个Key对应多个值的容器,需要自己封装一层,实现方式很多,可以使用链表去实现(分区域划分一个链表即可)但是这样做比较复杂但是频繁插入要比使用List性能好一些不用动态扩展长度,有机会可以分享一下如何使用链表实现更加高效率的一个Key对应多个值,今天分享一下简单快捷便于理解的。
2023-08-27 15:57:26
1006
原创 Unity ILRuntime热更新(二)
在热更新工程中修改测试类TestClass,添加属性Name(必须是属性,若是字段需要用属性进行二次封装才能获取)之后在Unity工程中进行调用,需要先初始化字节解释器AppDomain后进行下面省略了此过程。在热更新工程中创建测试类TestClass。先创建对象并获取属性的get和set函数。
2023-07-05 11:27:55
375
原创 Unity ILRuntime热更新(一)
/ILRuntime中的跨域访问就是指//在原始的Unity工程之间 和 热更工程 之间的相互访问调用//比如://在Unity工程中使用热更工程中声明的内容(类、委托、函数等)//在热更工程中使用Unity工程中声明的内容(类、委托、函数等)
2023-07-05 10:35:11
444
原创 Unity发送Post请求给GoLang服务端解析并返回
使用Unity发送Post请求到GoLang的Http服务器,Http服务器接收响应后返回给客户端程序。
2022-07-27 22:57:28
1010
原创 Excel转换为Lua的配置文件
首先我们下载一个第三方开源库,来给Excel表生成lua配置文件,下载地址https://github.com/XINCGer/Unity3DTraining/tree/master/XlsxToolsexcel文件必须保存为.xls格式,而不是.xlsx格式左下角的tab页签名字必须个文件名一样,并且加一个#前缀,比如我的这个CharacterTable文件,tab页签名字是#CharacterTableexcel的前4行是有特殊含义的:第1行是每个字段的名字说明第2行是每个字段的变量类型,一般只支持in
2022-07-05 21:34:31
2296
原创 C# 更加优质的操作MongoDB数据库
之前就写过一篇C#操作MongoDB数据库的文章,直接对数据库进行操作,不是很优化,代码在实际项目中比较零散,没有一个统一的规划,所以有了这篇文章,如果要入门的化看看之前的文章也可以进行项目的开发了C# 操作Mongodb数据库分别解释一下:Proxy.cs 完整代码Table.cs 完整代码Person.cs 完整代码测试ORM的框架部分以上就整理完了,下面我们来使用它!...
2022-07-04 12:20:25
904
原创 C# 服务器日志模块
给我们的服务器配置日志,这样我们可以按照规则(比如按照 月/天/小时 这样这样的结构把日志打印到对应的文件里),这样我们把日志文件分割在按照 年月日命名 生成的日志文件里,防止单个日志文件过大使用NuGet包中的Serilog包来对日志进行收集创建类库程序,便于生成DLL对外部直接使用对其进行二次封装...
2022-07-04 11:03:07
541
原创 Unity C# 网络学习(十一)——自定义协议生成工具
在开发网络游戏中,协议是必不可少的东西,一款游戏可能有非常多的协议,但是协议的重复性非常高,而且前端后端都需要,人工完成显然不现实,可以通过共同的配置去生成我们的协议
2022-06-27 20:52:36
804
原创 Unity C# 网络学习(十)——UnityWebRequest(二)
Unity帮我们定义好了一些相关的类,用于解析下载下来的数据的类,使用对应的类处理下载数据,他们就会在内部将下载的数据处理为对应的类型,方便使用2.DownLoadHandlerFile(用于下载文件并将文件保存到磁盘,内存占用少)3.DownLoadHandlerTexture(用于下载图片)4.DownLoadHandlerAssetBundle(用于提取AssetBundle)5.DownLoadHandlerAudioClip(用于下载音频文件)二.自定义DownLoadHandl
2022-06-26 14:05:23
2650
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人