纹理映射
纹理映射 在尝试复制真实世界的外貌时,人们很快意识到几乎任何物质的表面都是有特征的。木材长有纹理。皮肤长有皱纹;布料会有编织结构;油画会有画刷或滚筒留下的痕迹,即使是光滑的塑料也会有制作他的模具的凹凸不平的痕迹,并且光滑金属显示出机器加工过程的痕迹。材料的没有特征的地方很快也会被斑点,凹痕,污点,划痕,指纹和污垢覆盖。 在图形学中,我们把这些现象统称为“空间上表面属性的变化”——表面的属性在每一处地方都在发生着变化,但并没有真正意义上改变表面的形状,考虑到这些因素,所有的建模和渲染系统都提供了一些纹理映射的涵义:使用一个被称作纹理贴图,纹理图像,或者仅仅是一个纹理,来存储这些你想要在一个表面上展示的细节,然后进行数学处理,把这个图片“映射”到表面上。 事实证明,一旦存在将图像映射到表面的机制,就会有很多奇淫技巧,这些技巧已经超过了我们介绍表面细节的基本目标。纹理可以用来制作阴影和反射,提供光照信息,甚至定义表面形状。在复杂的交互程序中,纹理经常被用于存储与其作为一张图片毫无干系的的数据(这里不知道怎么组织语言了,举个例子就是我们可以把骨骼动画烘焙到一张纹理中,从而让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/
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篇:新项目使用GameFramework框架需知
1.AB包相关配置 GF资源管理实属牛批,但要使用它,并不是全自动的,还是要配置一下 创建一个静态类,类名随意,注意里面至少要包含以下三个属性,后面的地址所指就是打AB包所必须的三个配置文件(这个地址可以自己更改,注意改变路径就行) 12345678 [AssetBundleBuilderConfigPath] public static string AssetBundleBuilderConfig = Utility.Path.GetCombinePath(Application.dataPath, "GameMain/Configs/AssetBundleBuilder.xml");[AssetBundleEditorConfigPath] public static string AssetBundleEditorConfig = Utility.Path.GetCombinePath(Application.dataPath, "GameMain/Configs/AssetBundleEditor.xml");[Ass...
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流程 初始化相关数据,...
GameFramework篇:Setting(存档模块)使用示例
存档模块 存档模块的简单使用 GF自带了Setting模块,以键值对的形式存储玩家数据,对 UnityEngine.PlayerPrefs 进行封装。 主要的API在DefaultSettingHelper里面 其中Load功能是个空方法,并没有写,需要大家自己去写,一想也是,每个项目数据结构都不一样 下面是个简单的例子 然后大家根据自己项目需要再对此模块进行封装即可
GameFramework篇:StarForce学习笔记
流程模块 StarForce流程讲解 环境:StarForce matser 3.1.7 之前我们就提到过流程贯穿游戏的始终,那么今天就来详细的说一下流程模块 ProcedureLauch为游戏入口流程,我们就来看他是什么,他做了什么 一眼看见他继承自ProcedureBase 我们一层层跟进,发现他和状态机有着不可分割的关系,每个流程都是一个状态 他们的关系大体上可以用这个UML图解释,当然这只是非常非常简略的版本,如果要把所有特性都列出来,那将会很庞大的。推荐大家仔细研读这部分代码,体会编程的乐趣与开发者的智慧。 我们需要知道,由基层的Fsm更新来驱动状态机状态的更新,状态机状态的切换也会传递到底层的Fsm上,即一切状态都被Fsm持有与维护 我们就以ProcedureChangeScene这个流程类来熟悉上面的流程图 进入流程时,订阅了一些事件,并且为切换场景做好了准备 流程状态更新,如果场景加载已经完成,就根据需要切换场景。其中的procedureOwner为流程持有者,为GameFramework.Fsm.IFsm<GameFramework.Procedur...