《InsideUE4》UObject(一)开篇】的更多相关文章

UE生UObject,UObject生万物 引言 在上个GamePlay专题,谈到UE创建游戏世界的时候(GamePlay架构(一)Actor和Component),简单的介绍了一下UObject的功能: 藉着UObject提供的元数据.反射生成.GC垃圾回收.序列化.编辑器可见.Class Default Object等,UE可以构建一个Object运行的世界.(后续会有一个大长篇深挖UObject) 那么从本专题开始,我们将开始慢慢的填这个大坑.正所谓,千里之堤溃于蚁穴,万丈高塔始于垒土.在…
曾子曰:吾日三省吾身--为人谋而不忠乎?与朋友交而不信乎?传不习乎? 引言 上一篇我们谈到了在游戏引擎,或者在程序和高级编程语言中,设计一个统一对象模型得到的好处,和要付出的代价,以及在UE里是怎么对之尽量降低规避的.那么从本篇开始,我们就开始谈谈如何开始构建这么一个对象模型,并在此之上逐渐扩展以适应引擎的各种功能需求的. 众所周知,一般游戏引擎最底层面对的都是操作系统API,硬件SDK,所能借助到的工具也往往只有C++本身.所以考虑从原生的C++基础上,搭建对象系统,往往得从头开始造轮子,最底…
垃圾分类,从我做起! 引言 上篇我们谈到了为何设计一个Object系统要从类型系统开始做起,并探讨了C#的实现,以及C++中各种方案的对比,最后得到的结论是UE采用UHT的方式搜集并生成反射所需代码.接下来我们就应该开始着手设计真正的类型系统结构. 在之后的叙述中,我会同时用两个视角来考察UE的这套Object系统: 一是以一个通用的游戏引擎开发者角度来从零开始设计,设想我们正在自己实现一套游戏引擎(或者别的需要Object系统的框架),在体悟UE的Object系统的同时,思考哪些是真正的核心部…
你想要啊?想要你就说出来嘛,你不说我怎么知道你想要呢? 引言 上文讲到了UE的类型系统结构,以及UHT分析源码的一些宏标记设定.在已经进行了类型系统整体的设计之后,本文将开始讨论接下来的步骤.暂时不讨论UHT的细节,假设UHT已经分析得到了足够的类型元数据信息,下一步就是利用这个信息在程序内存中构建起前文的类型系统结构,这个过程我们称之为注册.同一般程序的构建流程需要经过预处理.编译.汇编.链接一样,UE为了在内存中模拟构建的过程,在概念上也需要以下几个阶段:生成,收集,注册,链接.总体的流程比…
在一起!在一起! 引言 前文中我们阐述了类型系统构建的第一个阶段:生成.UHT分析源码的宏标记并生成了包含程序元信息的代码,继而编译进程序,在程序启动的时候,开始启动类型系统的后续构建阶段.而本文我们将介绍类型信息的收集阶段. C++ Static 自动注册模式 另一种常用的C++常用的设计模式:Static Auto Register.典型的,当你想要在程序启动后往一个容器里注册一些对象,或者簿记一些信息的时候,一种直接的方式是在程序启动后手动的一个个调用注册函数: #include "Cla…
读的不如写的快 引言 在之前的<InsideUE4>UObject(四)类型系统代码生成和<InsideUE4>UObject(五)类型系统收集章节里,我们介绍了UE4是如何根据我们的代码和元标记生成反射代码,并在Main函数调用之前,利用静态变量的初始化来收集类型的元数据信息.经过了我这么长时间的拖更--也经过了Epic这么长时间的版本更替,把UE从4.15.1进化到了4.18.3,自然的,CoreUObject模块也进行了一些改进.本文就先补上一个关于代码生成的改进:在UE4.…
世界那么大,我想去看看 引言 通过对前九篇的介绍,至此我们已经了解了UE里的游戏世界组织方式和游戏业务逻辑的控制.行百里者半九十,前述的篇章里我们的目光往往专注在于特定一个类或者对象,一方面固然可以让内容更有针对性,但另一方面也有了身在山中不见山的困惑.本文作为GamePlay章节的最终章,就是要回顾我们之前探讨过的内容,以一个更高层总览的眼光,把之前的所有内容有机组织起来,思考整体的结构和数据及逻辑的流向. 游戏世界 如果我们在最初篇所问的,如果让你来制作一款3D游戏引擎,你会怎么设计其结构?…
一人之下,万人之上 引言 上篇我们讲到了UE在World之上,继续抽象出了Player的概念,包含了本地的ULocalPlayer和网络的UNetConnection,并以此创建出了World中的PlayerController,从而实现了不同的玩家模式策略.一路向上,依照设计里一个最朴素的原理:自己是无法创建管理自身的,所以Player也需要一个创建管理和存储的地方.另一方面,上文提到Player固然可以负责一些跟玩家相关的业务逻辑,但是对于World之上协调管理的逻辑却也仍然无处安放. 如果…
你们对力量一无所知 引言 回顾上文,我们谈完了World和Level级别的逻辑操纵控制,如同分离组合的AController一样,UE在World的层次上也采用了一个分离的AGameMode来抽离了游戏关卡逻辑,从而支持了逻辑的组合.本篇我们继续上升一个层次,考虑在World之上,游戏还需要哪些逻辑控制? 暂时不考虑别的功能系统(如社交系统,统计等各种),单从游戏性来讨论,现在闭上眼睛,想象我们已经藉着UE的伟力搭建了好了一个个LevelWorld,嗯,就像<西部世界>一样,场景已经搭建好了,…
<InsideUE4>-6-GamePlay架构(五)Controller Tags: InsideUE4 GamePlay 那一天 Pawn又回想起了 被Controller所支配的恐惧 引言 如上文所述,UE从Actor中分化了一些专门可供玩家"控制"的Pawn,那我们这篇就专门来谈谈该怎么个控制法! 所谓的控制,本质指的就是我们游戏的业务逻辑.比如说玩家按A键,角色自动找一个最近的敌人并攻击,这个自动寻找目标并攻击的逻辑过程,就是我们所谈的控制. Note1:重申一下…