ET篇:账号异常解决方案汇总
前言 当然了,网络游戏中的异常太多了,断线重连,封号处理之类的,但是目前我还没有接触到那些模块,就没必要做超前的处理,等做到了也会整合到这篇博客里,本篇博客主要是讲解思路,可能代码上面有些描述不够清晰,大家可以去我的项目里翻一下完整代码 https://gitee.com/NKG_admin/MKGMobaBasedOnET 常见异常为 账号被人顶下来 客户端自身或者网络问题(死机,网络不良)无法连接服务器或者与服务器断开连接 客户端突发状况(断电,退出游戏),与服务器断开连接 在开始说明解决方案之前,我们先明确几个概念 如果客户端这边退出游戏,将会调用Session.Dispose(),并且服务端与之对应的Session也会执行Dispose 网络不良或者没有网络,将不会调用Session.Dispose(),要靠双端的心跳包情况来让服务端判断是否要断开连接(执行Session.Dispose()),然后双端各自执行断线后的逻辑 emmm,为什么这两个简单的概念把我绕了一天?(观众:是不是脑瘫就不用我们多说了⑧) 对应的三个解决方案 账号被人顶下来的解决方案 既然是被人...
ET篇:ETBook笔记汇总
1.2 为什么使用C# .net core做服务端? GitHub原地址: 为什么使用C# .net core做服务端? 黑体字为作者(熊猫大佬)原创,红色为个人理解 游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高。开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHON 或者C++ + LUA 到现在 很多公司开始使用erlang,go,java,c#。目前是一个百花齐放的局面。 但是如果是要你重新做一个网游server,不考虑对公司或者已有的东西兼容性,你会怎么选择?我仔细想了一下这个问题,大概有这个几个方面需要考虑: 1. 语言的稳定性(致命性) 游戏服务器的特点是高负载低延时。所以一般服务端进程都是带状态的,一旦挂掉就意味着数据丢失,这点是无法容忍的。 2. 运行时热更(致命性) 游戏服务器逻辑极其复杂,很容易出现bug,但是又不能经常停服,所以热更修复bug就显得十分必要。出现错误开发人员可以立即编写代码,然后热更修复,线上用户完全感觉不到。 3. 是否有协程支持(重要性5星) 分布式服务器架构,进程与进程之间必然会有...
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 /// &l...
探索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...
纹理映射
纹理映射 在尝试复制真实世界的外貌时,人们很快意识到几乎任何物质的表面都是有特征的。木材长有纹理。皮肤长有皱纹;布料会有编织结构;油画会有画刷或滚筒留下的痕迹,即使是光滑的塑料也会有制作他的模具的凹凸不平的痕迹,并且光滑金属显示出机器加工过程的痕迹。材料的没有特征的地方很快也会被斑点,凹痕,污点,划痕,指纹和污垢覆盖。 在图形学中,我们把这些现象统称为“空间上表面属性的变化”——表面的属性在每一处地方都在发生着变化,但并没有真正意义上改变表面的形状,考虑到这些因素,所有的建模和渲染系统都提供了一些纹理映射的涵义:使用一个被称作纹理贴图,纹理图像,或者仅仅是一个纹理,来存储这些你想要在一个表面上展示的细节,然后进行数学处理,把这个图片“映射”到表面上。 事实证明,一旦存在将图像映射到表面的机制,就会有很多奇淫技巧,这些技巧已经超过了我们介绍表面细节的基本目标。纹理可以用来制作阴影和反射,提供光照信息,甚至定义表面形状。在复杂的交互程序中,纹理经常被用于存储与其作为一张图片毫无干系的的数据(这里不知道怎么组织语言了,举个例子就是我们可以把骨骼动画烘焙到一张纹理中,从而让GPU去执行蒙...
Game Engine EntityObject Models
本文内容来自:https://www.youtube.com/watch?v=jjEsB611kxs&feature=youtu.be&ab_channel=BobbyAnguelov 视频原作者还出了一个续集,主要是针对ECS空间结构的部分重讲,有兴趣可以去看看:https://www.youtube.com/watch?v=fuiNOWEUnJ8&ab_channel=BobbyAnguelov 正文 主要分为两大部分 第一部分:讨论当前游戏业界两种主要的对象/实体(object/entity)模型 Game-Object/Entity Component模型 Entity Component System模型 第二部分:讨论Kruger Entity模型作为一种可替代的方案 Ye Olde Object Model 非常简单随性的方法 不容易拓展,也不容易复用 最后经常会有这些问题: 深层级 继承地狱 重复代码 所有标准OOP会遇到的问题 警告 Object/Entity模式不是必须践行的标准,每个引擎都有自己独特的味道(确实,味道很大...
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/








