ET&&FGUI接入URP流程
前言
前几天技能系统发布了新版本,休息了以下,接下来要开始开发Moba项目的特效部分了,准备使用Shader Graph(简称SG)技术栈,但是SG只在SRP中才可以正常工作,所以要做一些适配。
环境
DCET中的FGUI模块(Model层与Hotfix层)
ET 5.0
Unity 2019.4.8 LTS
URP 7.3.1
步骤
由于URP版本中Camera的特殊性(使用Render Type和CameraStack控制渲染),需要先对相机模块进行更改
首先Unity.Model和ThirdParty的Assembly Definition需要索引Unity.RenderPipeline.Universal.Runtime
我们要确保整个项目只有一个Render Type为Base的Camera,否则渲染将不会如我们所愿的那样(指Build-in管线中相机渲染结果的自动叠加)
首先更改FGUI源码中的StageCamera.cs文件
123456789101112131415161718192021222324252627282930313233 /// & ...
探索C#中值类型/引用类型为空时所占用的内存大小
前言
又看到一个比较让人害怕的面试题,实例化一个C#的空class会占用多少内存空间。 。。。为什么会有这种问题,当时第一反应肯定不是零,至少要像C++那样有一个区别地址的偏移吧,不然找都找不到,所以就猜了1。 结果果然不出我所料,我蒙错了,不会就学。 找了一大圈,终于找到一个讲的全面的帖子:https://docs.microsoft.com/en-us/archive/msdn-magazine/2005/may/net-framework-internals-how-the-clr-creates-runtime-objects
下面的内容基本就是围绕这篇文章来说的,也可以直接去看原文。
正文
环境:.Net Framework 4.7.2
IDE:Rider 2019.3.3
编译环境:Debug prefer x86(32bit)
值类型
值类型相较于引用类型好理解多了,他直接分配到栈上,不需要GC,不需要引用机制。所以它空间的计算也是最简单的。直接计算其中包含的字段空间即可(有一些特性会影响内存的编排,不过不在本篇文章讨论范围内了)。 计算机中的内存通常以字节的形式 ...
提取LOL全部美术资源
前言
去年发布了一个提取LOL资源的视频,感谢大家喜爱
但是我发现很多朋友并不满足于视频中提到的那些,还想提取地图之类的资源,所以我干脆从零开始教大家提取图片,声音,模型,地图
环境准备
先下载工具
Obsidian,WAD资源转换工具,用于分析WAD文件,导出我们认识的资源类型(原画,UI,音效,视频等):https://github.com/Crauzer/Obsidian
LoL-MAPGEO-Converter,地图导出工具:https://github.com/FrankTheBoxMonster/LoL-MAPGEO-Converter
lol2dae,用于导出模型:https://sourceforge.net/projects/lol2dae/
Obsidian使用教程
新版的Obsidian可以自动整理资源索引表,如果打开wad文件还是乱码,开启科学上网,重新打开软件即可。
对于项目的原画,UI,音效,视频等资源,皆位于
英雄联盟\LeagueClient\Plugins
可以直接在这个目录搜索wad后缀名,然后根据自己喜好进行导出即可!
提取地 ...
提取LOL模型,动画,音效,贴图,UI到Unity的完整流程
前言
这阵子要着手做技能系统了,但苦于没有好的美术资源,直到有一天,我学会了提取LOL的资源。。。
工具准备
链接:https://pan.baidu.com/s/1DsWbUJs_vdCdP3Zz5M7QDg 提取码:wlwr 复制这段内容后打开百度网盘手机App,操作更方便哦
视频链接
https://www.bilibili.com/video/av54407596
C#篇:扩展C#中的异步方法
本文翻译自
https://blogs.msdn.microsoft.com/seteplia/2018/01/11/extending-the-async-methods-in-c/ 在前一篇博客文章中,我们讨论了c#编译器如何转换异步方法。在这篇文章中,我们将关注c#编译器为定制异步方法的行为提供的扩展点。 有三种方法可以控制异步方法的机制: 1.在System.Runtime.CompilerServices中提供您自己的async方法构建器。 2.使用自定义task awaiter。 3.定义自己的任务类型。
自定义在System.Runtime.CompilerServices命名空间的类型[toc]
从上一篇文章中我们知道,c#编译器将异步方法转换成一个生成的状态机,它依赖于一些预定义的类型。但是c#编译器并不期望这些已知的类型来自特定的程序集。例如,您可以在项目中提供自己的AsyncVoidMethodBuilder实现,c#编译器将“绑定”异步机制到您的自定义类型。 这是一个很好的方法来探索底层的转换是什么,看看在运行时发生了什么:
123456789101112 ...
GameFramework篇:个人笔记汇总
视频教程地址
GF视频教程地址
官方示例StarForce学习笔记
https://www.lfzxb.top/gameframework-starforce/
框架基本理解以及源码下载
https://www.lfzxb.top/gameframework-base/
新项目使用GameFramework框架需知
https://www.lfzxb.top/gameframework-fornew/
自定义事件并订阅的流程
https://www.lfzxb.top/gameframework-diyevent/
资源热更新讲解
https://www.lfzxb.top/gameframework-reshotfix/
网络模块使用示例
https://www.lfzxb.top/gameframework-network/
存档模块使用示例
https://www.lfzxb.top/gameframework-setting/
VFS讲解
https://www.lfzxb.top/gameframework-vfs/
GameFramework篇:框架基本理解和源码下载
先偷偷观察一下E神的GitHub
只有三个项目,尽管如此,我还是感受到来自E神的压迫感。
我们再来看一下官网的描述
什么个意思呢?
我们先看UGF
可以看到有GameFramework的dll文件,那么它是从哪来的呢?
它来自GameFramework
再看UGF的Scripts,里面就是UnityGameFramework.Runtime和UnityGameFramework.Editor模块啦
我们可以这样理解,GameFramework是完全和Unity分离的的,由它衍生出与Unity相交互的UnityGameFramework,这也是我们在Unity中使用GameFramework框架必不可少的部分,我们可以把UGF当成平时使用的插件。最后UGF和Unity相结合,就做出游戏啦~
然后就是演示Demo——StarForce(一目了然)
然后我们要把这三个项目都下载
为什么全都要呢,因为我们平时学习肯定要顺藤摸瓜来看代码实现而,GF是GF.dll的来源,也就是最终源码,相对于反编译dll,我更习惯于直接看源码~所以三个都不能少
打开StarForce项目 ...
GameFramework篇:自定义事件并订阅的流程
自定义事件并订阅
正如木头大佬所说
在GF里面创建和使用自定义事件还是比较容易的
这里举个例子
我们进行场景切换,要加载完下一场景所有资源才能切换吧,不然黑屏是什么鬼
这里我是切换场景后,开始生成多个实体,所有实体生成完毕,关闭过渡UI,显示游戏界面
创建
这个事件类里面的变量可以随意定义(至少要包括Clear()方法和Id变量)
其中Fill()函数是用来填充事件类里面的数据的(可有可无,视情况而定),将LoadNextResourcesSuccess设为true
定义好了事件,我们要怎么使用呢
先订阅
HideUI为回调函数的名称,参数必须为(委托的原因)
在最后一行执行Fire,意为抛出事件,所有订阅这个事件的回调函数都将被执行
最后,用完了,要放回去,取消订阅(在UI关闭的时候)
总结
在GF里自定义事件主要分为以下步骤
创建自定义事件
订阅自定义事件并指定回调函数
达成条件,抛出事件
取消订阅 其实我们不难发现,GF的内置事件执行流程也和这大致一样,不过更复杂点就是了,大家可以自行查看内置事件,循着源码过一遍,就理解了
GameFramework篇:Network模块使用示例
Network模块
连接ET服务端
前言
过了那么久,我又回来了,因为我开始研习服务端了(欠的技术债总要还的),因为GF已经越来越熟练,并且使用过程中也十分稳定,所以我已经决定了,使用GF做客户端,至于服务端,因为对于中大型项目,服务端框架也必不可少,我选择了ET(另一个很强大的框架,是双端的链接:https://github.com/egametang/ET)。
项目工程下载
既然要学习,那就要一个案例,身为服务端小白,我是写不出什么案例的,E大的StarForce中的Network功能已经做了示例,但是木头大佬已经讲解过了,我就没必要再说一遍了,链接http://www.benmutou.com/archives/2630,那么用啥案例呢?这就要请出我们的毛毛大佬了,奉上GayHub https://github.com/Maomao110/StarForce
下载之后,需要下载submoudle,不然会报错,不会的同学可以参考这篇的下载方式 https://blog.csdn.net/qq_15020543/article/details/86774781
至于ET,我 ...
GameFramework篇:资源热更新讲解
资源热更新步骤
准备工作:
StarForce dev/Update分支 https://github.com/EllanJiang/StarForce/tree/dev/Update 注意下载子库
** HFS的下载,作为文件服务器 http://www.rejetto.com/hfs/?f=dl**
在这个分支里,E大已经写好了完整的更新流程
具体细节就是
ProcedureCheckVersion流程
声明更新版本更新配置表回调函数
订阅添加WebRequest任务请求的成功与失败事件
添加WebRequest任务请求
添加WebRequest任务请求成功,执行订阅的事件,反序列化为VersionInfo类(包含版本信息以及更新细节),如果为强制更新,就跳转到下载网页下载船新客户端(你没有体验过得船新版本),如果为热更新,就配置下载文件地址,校验本地客户端和下载到的版本资源列表版本号,如果一致,说明不用更新,直接进入下一流程,如果不一致,说明需要更新版本资源列表,更新成功后,进入下一流程。
ProcedureUpdateResource流程
初始化相关数据,检 ...