UnrealEngine4之UObject(一)】的更多相关文章

Runtime最关键的实现是UObject,它是全部引擎层面.游戏层面对象的基类. UObject实现了动态创建.持久化.脚本化.内存管理.生存期控制. --------------------------- 关于动态创建 --------------------------- 通过一个类名创建一个对象就是动态创建. UnrealEngine4流程就是: FStringClassReference XxxxClassName; | TSubclassOf<Xxxx> XxxxClass; |…
曾子曰:吾日三省吾身--为人谋而不忠乎?与朋友交而不信乎?传不习乎? 引言 上一篇我们谈到了在游戏引擎,或者在程序和高级编程语言中,设计一个统一对象模型得到的好处,和要付出的代价,以及在UE里是怎么对之尽量降低规避的.那么从本篇开始,我们就开始谈谈如何开始构建这么一个对象模型,并在此之上逐渐扩展以适应引擎的各种功能需求的. 众所周知,一般游戏引擎最底层面对的都是操作系统API,硬件SDK,所能借助到的工具也往往只有C++本身.所以考虑从原生的C++基础上,搭建对象系统,往往得从头开始造轮子,最底…
UE生UObject,UObject生万物 引言 在上个GamePlay专题,谈到UE创建游戏世界的时候(GamePlay架构(一)Actor和Component),简单的介绍了一下UObject的功能: 藉着UObject提供的元数据.反射生成.GC垃圾回收.序列化.编辑器可见.Class Default Object等,UE可以构建一个Object运行的世界.(后续会有一个大长篇深挖UObject) 那么从本专题开始,我们将开始慢慢的填这个大坑.正所谓,千里之堤溃于蚁穴,万丈高塔始于垒土.在…
垃圾分类,从我做起! 引言 上篇我们谈到了为何设计一个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.…
先大量使用蓝图制作项目,后续再用C++把复杂的蓝图重写一遍,用C++代码按照蓝图依葫芦画瓢就可以了,很简单,但需要遵守一些原则: 第一种方法:使用继承 一.创建一个C++类作为蓝图的父类(C++类继承蓝图一样的父类),在UE4中修改蓝图的父类. 二.C++类中的方法.成员变量与蓝图一一对应,并且方法和成员变量名称不能与蓝图的重复. 三.A蓝图不能直接使用B蓝图的变量,A蓝图把要公开的变量封装在函数内返回,并且只返回UE4自带的基础变量类型,不能返回自定义类型,以方便C++重写时返回C++中的成员…
转自:https://blog.csdn.net/or_7r_ccl/article/details/54986393 在UnrealEngine4中使用Google Protobuf        最近项目中需要把Google protobuf加入到UnrealEngine4游戏工程中,积累下一些有用的经验分享下. UE有一套自己的编译规则,如何在游戏中添加第三方库官方有一篇很详细的文档(Linking Static Libraries Using The Build System).    …
第一次拿到UE4源码,扫了一遍.各种宏定义,各种模板,各种类层次.杂乱无章. 后来慢慢明确其规律: UE4的编码风格是在匈牙利命名法的基础下做了改进,使其更适用游戏引擎业务(业务特点:数据可视编辑.脚本化). UE4保留了匈牙利命名法的大驼峰.使Tag含义更易读. UE4里有非常多类型都以F.U.A.T为前缀,成员变量不加m前缀.为什么呢? 站在设计者的角度,想想UE4的引擎设计思路.引擎必定是很庞大复杂,但再复杂的引擎都是从零设计编码出来的. 设计者设计之初定然明确这是一个庞然大物,要想可控.…