美文网首页
UE4对象系统_前言

UE4对象系统_前言

作者: 蛋求疼 | 来源:发表于2017-08-17 22:38 被阅读0次

概述

UE4的对象系统可以说是整个引擎的核心模块,其在引擎中的地位如下图:

UE4_ObjectSys_Level.png

该对象系统具有很强的扩展性,新增的类只需要从UObject类继承下来就可以融入到对象系统中。
对象系统具有如下几个特性:

  1. 反射对象属性和方法
  2. 对象的序列化
  3. 垃圾回收
  4. 创建和查找对象
  5. 通过配置文件设置对象的默认属性
  6. 网络支持(Replication和RPC)

C++语言本身不支持上述功能,为了实现上述功能,引擎定义了对象基类UObject, UObject类和其子孙类分别拥有一个UClass实例, UClass实例作为对象类的元数据(meta data),描述了类的反射信息和其它编辑器需要的信息。
Unreal Reflection System:
Each class that derives from UObject has a singleton UClass created for it that contains all of the meta data about the class instance. UObject and UClass together are at the root of everything that a gameplay object does during its lifetime. The best way to think of the difference between a UClass and a UObject is that the UClass describes what an instance of a UObject will look like, what properties are available for serialization, networking, etc.

整个对象系统,跟UE3比较起来变化不大。Blueprint对应UE3中的uc脚本系统和Kismet。 UE3通过在uc中定义一些uc class属性,通过uc编译器进行生成C++头文件;UE4通过在C++的头文件中的类定义中加入些宏(确切地说是空宏),让UnrealHeaderTool对.h文件进行预处理,产生一些C++ .h,.cpp文件,这些代码充当胶水层,将C++ Class加入Reflection功能。
注:UE3中的Kismet也是一个通过可视化连线达到编程目的,但是谈不上一个语言,其连接结点由C++代码实现;Blueprint集成了uc脚本和Kismet的功能,既能可视化编程又能够后端生成uc虚拟机字节码执行(也可以生成其它语言),所以Blueprint又叫Kismet2(这也许就是引擎Blueprint的接口有K2前缀的原因)。

对象的名字空间

与UE3类似,在对象系统中,每个对象有唯一的路径名和类型(路径名相同但类型不同是允许的)。这点应该是学习Java的包命名方式吧。
举个例子:


UE4_Editor_Content_Browser.jpg

上图中FirstPerson_Run资源的全路径名为:
AnimSequence'/Game/FirstPerson/Animations/FirstPerson_Run.FirstPerson_Run'。

  • AnimSequence 是资源对象类名
  • /Game/FirstPerson/Animations/ 是资源所在的路径(游戏项目的Content目录下的FirstPerson/Animations目录)
  • FirstPerson_Run.FirstPerson_Run 第一个FirstPerson_Run是包名(加载到内存后对应一个UPackage实例, 每个uasset文件对应为一个包,第二个FirstPerson_Run是动画序列对象的名字,它的类型是AnimSequece。在虚幻中把第一个FirstPerson_Run对象称为第二个FirstPerson_Run对象的Outer

通过类型和路径名就可以精确找到该对象。
注:在UE3中是对象名字空间是不带有资源所在路径这一因素的。

行程安排

代码模块:

  • RunTime\UObjectCore 对象系统
  • RunTime\Core 封装平台相关代码和算法

后续对象系统系列文章将从如下几个方面进行着手:

  1. 对象的类描述,主要通过UClass类来实现。
    • 与UClass的相关概念
    • UClass实例的创建
    • 分析一个由UnrealHeaderTool生成的反射代码
  2. 对象的创建流程和查找
  3. 对象的序列化, 文件格式,Linker
  4. 垃圾回收流程和机制
  5. Blueprint的原理 和 VM
    a. Blueprint的可视化描述
    b. 字节码生成
    c. VM的执行
  6. 模块机制,如何实现hot-reload
  7. 对象的Replication(Network)

使用UE4开发应用必须要了解对象系统(特别是1-5点),在开发中会碰到有的同学创建的对象被莫名其妙地回收了,导致系统崩溃。究其原因就是没有了解对象系统是如何利用UClass提供的信息来进行GC的,在定义C++类时是否需要给成员变量加UPROPERTY宏犯迷糊。

相关文章

  • UE4对象系统_前言

    概述 UE4的对象系统可以说是整个引擎的核心模块,其在引擎中的地位如下图: 该对象系统具有很强的扩展性,新增的类只...

  • UE4对象系统_UFunction

    `UFunction UFunction对象描述了一个Object的成员函数,使之能够被脚本系统调用。UFunct...

  • UE4对象系统_UProperty

    UProperty(含其子类)实例描述了类的某个成员变量的反射信息。 UProperty类 UBoolProper...

  • UE4 Actor和Component

    UE4 Actor和Component 在UE4游戏场景中看到的所有对象皆是Actor,而Actor复杂的功能是由...

  • UE4 开发之如何创建 iOS 平台插件

    前言 在前俩篇文章中,我与大家分享了 UE4 开发如何配置 Xcode 的调试环境以及如何实现 UE4 引擎的按钮...

  • UE4垃圾回收

    UE4引擎为我们搭建了一套UObject对象系统,并且加入了垃圾回收机制,使我们用C++进行游戏开发时更加方便,而...

  • UE4对象系统_垃圾回收

    UE中的Object对象的回收不需要我们手动去delete,而是经过垃圾回收流程来销毁不再被引用的对象。GC使用的...

  • 鼠标的显示与隐藏及改变输入模式

    前言 我是最近才开始接触UE4的,目前在自学这款软件。UE4在国内的普及范围还不是很广,很多时候找合适的教程...

  • ★★★蓝图进阶(七)

    前言 我是最近才开始接触UE4的,目前在自学这款软件。UE4在国内的普及范围还不是很广,很多时候找合适的教...

  • ★★★蓝图进阶(三)

    前言 我是最近才开始接触UE4的,目前在自学这款软件。UE4在国内的普及范围还不是很广,很多时候找合适的教...

网友评论

      本文标题:UE4对象系统_前言

      本文链接:https://www.haomeiwen.com/subject/btinrxtx.html