CN111930362A - 一种基于UE4平台的Prefab开发系统及创建方法 - Google Patents

一种基于UE4平台的Prefab开发系统及创建方法 Download PDF

Info

Publication number
CN111930362A
CN111930362A CN202010715237.3A CN202010715237A CN111930362A CN 111930362 A CN111930362 A CN 111930362A CN 202010715237 A CN202010715237 A CN 202010715237A CN 111930362 A CN111930362 A CN 111930362A
Authority
CN
China
Prior art keywords
prefab
scene
variable
actor
stored
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010715237.3A
Other languages
English (en)
Inventor
刘飞
郑昊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Perli Information Technology Co ltd
Original Assignee
Shanghai Perli Information Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Perli Information Technology Co ltd filed Critical Shanghai Perli Information Technology Co ltd
Priority to CN202010715237.3A priority Critical patent/CN111930362A/zh
Publication of CN111930362A publication Critical patent/CN111930362A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于UE4平台的Prefab开发系统及其创建方法,该Prefab开发系统由序列化、反序列化、编辑器三大模块构成,其中序列化、反序列化是整个系统的核心技术,并且联系较大。本发明中数据序列化和反序列化中最重要的一点就是要用到反射技术。UE4本身提供了非常好的反射技术支持,任何标记为UCLASS的C++类和USTRUCT的C++结构体都可以支持反射,任何标记为UPROPERTY的成员变量都能通过反射来获取变量名并且取到变量值。根据这些特性就可以找到所有的类和结构体并序列化为数据流。

Description

一种基于UE4平台的Prefab开发系统及创建方法
技术领域
本发明涉及计算机软件开发技术领域,具体为一种基于UE4平台的Prefab开发系统及创建方法。
背景技术
目前在UE4平台上的可复用的模块化的工作方式主要是依靠Blueprint(蓝图)的方式,而Blueprint其实是一种可视化的代码,其继承、重载的方式与传统的面向对象的编码方式一致。但是Blueprint有个比较大的缺点:Blueprint的基础是Actor(UE4中的可存在于场景中的基本物体),但是在Blueprint中只允许根物体是Actor,其他物体只能是组件;但是UE4的场景是以多个Actor组成的,Actor于Actor之间可以有层级关系,如果用Blueprint做模块化就无法实现多层Actor的预制物体。
现有的主流VR/AR开发平台主要是UE4和Unity,而Unity的开发效率比UE4要高很多,其中很大一部分原因是:Unity具有简单易用的Prefab(预制体,模块化)工作流程,而UE4里类似的功能还是按照传统的继承、重载的思维方式构建的。所以开发者迫切需要在UE4平台有个合适的Prefab工具来辅助开发。
发明内容
本发明的目的在于提供一种基于UE4平台的Prefab开发系统及创建方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:一种基于UE4平台的Prefab开发系统创建方法,其具体步骤如下:
第一步,如图1所示,启动UE4程序UE4Editor.exe,选择工程文件夹并创建工程。创建工程成功之后会在文件夹中生成子目录Content,然后关闭此UE4工程。
第二步,在Content文件夹的同一个目录下新建文件夹命名为Plugins,复制本发明的文件夹到Plugins文件夹下。
第三步,重新打开UE4工程,这时系统会提示是否需要重新编译,选择是,等待编译完成之后就自动进入场景。
第四步,创建Prefab。如图1,在打开的场景里创建多个Actor并修改Actor的层级,保证层级的最上层只有一个Actor,然后就可以用这个最上层的Actor来创建Prefab。创建Prefab的方式有两种:第一种方式,选择工具栏上的LGUI Tools/Prefab/Create Prefab;第二种方式,在Scene Outliner(场景大纲)的扩展栏上选择Prefab/Create Prefab。成功后会弹出对话框来选择需要保存Prefab的名称和位置,保存成功后在Content Browser(资源浏览器)中会显示保存的Prefab Asset(预制体资产)。
第五步,修改Prefab。如图2,当在场景中修改了Prefab和子对象中的元素的属性之后,实际上只是修改了场景中创建的实例,而原始的Prefab Asset的数据并没有变化。如果继续这样使用就导致再次创建的实例并不是最新的数据。所以我们在修改了Prefab属性数据之后需要保存数据。点击LGUI Tools/Prefab/Apply Prefab就可以保存数据到PrefabAsset了。
第六步,编辑器中加载Prefab。如图3,在场景中选择一个Actor作为父对象(Prefab创建的Actor物体将会挂载在父对象下),从Content Browser中找到需要加载的Prefab Asset,选中并拖拽到场景中的任意位置,然后此Prefab将会显示在场景中。
第七步,运行时加载Prefab。如图4,首先需要获取Prefab Asset的引用并准备父对象的SceneComponent(场景中具有位置、旋转、缩放的组件),使用c++代码或蓝图调用LoadPrefab接口并传入参数,然后此Prefab就加载到场景中了。
一种基于UE4平台的Prefab开发系统,由序列化、反序列化、编辑器三大模块构成,其中序列化、反序列化是整个系统的核心技术,并且联系较大;
进一步的,如图6所示在创建Prefab的时候,Prefab系统将按照以下步骤执行:
①Prefab系统会根据根物体Actor递归查找所有的子Actor,当收集到所有的Actor之后就遍历每个Actor中的标为UPROPERTY的成员变量并暂存到列表;
②对于每个Actor,查找此Actor中挂载的所有Component(组件),当收集到所有Component之后就遍历每个Component中标记为UPROPERTY的成员变量并暂存到列表;
③对于暂存的所有的成员变量,给每个变量按照类型分类:引用类型(Actor、Component、Object)、值类型(int8、int16、int32、int64、uint8、uint16、uint32、uint64、bool、float、double、Vector2、Vector3、Vector4、Quaternion、Color、Linear Color、Rotator)、字符串类型(Name、Text、String),另外还有个特殊的类型Instanced Object;
④变量分好类型之后就可以按照类型来存储变量值。为了统一存储格式,所有的值类型都用字节数组来存储,引用类型用Object数组存储,字符串类型用String数组存储;而Instanced Object会先拆分为Class存储到Object数组,然后再把成员变量按照Actor/Component相同的方式序列化存储。反序列化的技术点类似,只是反过来将存储变为查询-读取-赋值,这里不再赘述。
进一步的,为了兼容编辑器版本和运行时版本,Prefab系统使用两种数据存储方式:
①变量名字符串作为key、变量值作为value的key-value无序存储,在编辑器版本可以方便修改变量名和类型,可以快速查找变量值;
②按照成员变量的序列顺序,变量值作为二进制内容存储为有序数组,在运行时负责高效查找数据并反序列化。对比全字符串的序列化方式,本发明采用的二进制直接存储的方式在序列化和反序列化效率上有极大提升,并且也能降低运行时打包的文件体积。
本发明中数据序列化和反序列化中最重要的一点就是要用到反射技术。UE4本身提供了非常好的反射技术支持,任何标记为UCLASS的C++类和USTRUCT的C++结构体都可以支持反射,任何标记为UPROPERTY的成员变量都能通过反射来获取变量名并且取到变量值。根据这些特性就可以找到所有的类和结构体并序列化为数据流。
附图说明
图1为本发明创建流程示意图;
图2为本发明中修改Prefab示意图;
图3为本发明中编辑器中加载Prefab示意图;
图4为本发明中运行时加载Prefab示意图;
图5为本发明模块结构的示意图;
图6为本发明序列化过程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-6,本发明提供了第一步,如图1所示,启动UE4程序UE4Editor.exe,选择工程文件夹并创建工程。创建工程成功之后会在文件夹中生成子目录Content,然后关闭此UE4工程。
第二步,在Content文件夹的同一个目录下新建文件夹命名为Plugins,复制本发明的文件夹到Plugins文件夹下。
第三步,重新打开UE4工程,这时系统会提示是否需要重新编译,选择是,等待编译完成之后就自动进入场景。
第四步,创建Prefab。如图1,在打开的场景里创建多个Actor并修改Actor的层级,保证层级的最上层只有一个Actor,然后就可以用这个最上层的Actor来创建Prefab。创建Prefab的方式有两种:第一种方式,选择工具栏上的LGUI Tools/Prefab/Create Prefab;第二种方式,在Scene Outliner(场景大纲)的扩展栏上选择Prefab/Create Prefab。成功后会弹出对话框来选择需要保存Prefab的名称和位置,保存成功后在Content Browser(资源浏览器)中会显示保存的Prefab Asset(预制体资产)。
第五步,修改Prefab。如图2,当在场景中修改了Prefab和子对象中的元素的属性之后,实际上只是修改了场景中创建的实例,而原始的Prefab Asset的数据并没有变化。如果继续这样使用就导致再次创建的实例并不是最新的数据。所以我们在修改了Prefab属性数据之后需要保存数据。点击LGUI Tools/Prefab/Apply Prefab就可以保存数据到PrefabAsset了。
第六步,编辑器中加载Prefab。如图3,在场景中选择一个Actor作为父对象(Prefab创建的Actor物体将会挂载在父对象下),从Content Browser中找到需要加载的Prefab Asset,选中并拖拽到场景中的任意位置,然后此Prefab将会显示在场景中。
第七步,运行时加载Prefab。如图4,首先需要获取Prefab Asset的引用并准备父对象的SceneComponent(场景中具有位置、旋转、缩放的组件),使用c++代码或蓝图调用LoadPrefab接口并传入参数,然后此Prefab就加载到场景中了。
一种基于UE4平台的Prefab开发系统,由序列化、反序列化、编辑器三大模块构成,其中序列化、反序列化是整个系统的核心技术,并且联系较大;
进一步的,如图6所示在创建Prefab的时候,Prefab系统将按照以下步骤执行:
①Prefab系统会根据根物体Actor递归查找所有的子Actor,当收集到所有的Actor之后就遍历每个Actor中的标为UPROPERTY的成员变量并暂存到列表;
②对于每个Actor,查找此Actor中挂载的所有Component(组件),当收集到所有Component之后就遍历每个Component中标记为UPROPERTY的成员变量并暂存到列表;
③对于暂存的所有的成员变量,给每个变量按照类型分类:引用类型(Actor、Component、Object)、值类型(int8、int16、int32、int64、uint8、uint16、uint32、uint64、bool、float、double、Vector2、Vector3、Vector4、Quaternion、Color、Linear Color、Rotator)、字符串类型(Name、Text、String),另外还有个特殊的类型Instanced Object;
④变量分好类型之后就可以按照类型来存储变量值。为了统一存储格式,所有的值类型都用字节数组来存储,引用类型用Object数组存储,字符串类型用String数组存储;而Instanced Object会先拆分为Class存储到Object数组,然后再把成员变量按照Actor/Component相同的方式序列化存储。反序列化的技术点类似,只是反过来将存储变为查询-读取-赋值,这里不再赘述。
进一步的,为了兼容编辑器版本和运行时版本,Prefab系统使用两种数据存储方式:
①变量名字符串作为key、变量值作为value的key-value无序存储,在编辑器版本可以方便修改变量名和类型,可以快速查找变量值;
②按照成员变量的序列顺序,变量值作为二进制内容存储为有序数组,在运行时负责高效查找数据并反序列化。对比全字符串的序列化方式,本发明采用的二进制直接存储的方式在序列化和反序列化效率上有极大提升,并且也能降低运行时打包的文件体积。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

Claims (5)

1.一种基于UE4平台的Prefab开发系统创建方法,其特征在于,其具体步骤如下:
第一步,启动UE4程序UE4Editor.exe,选择工程文件夹并创建工程,创建工程成功之后会在文件夹中生成子目录Content,然后关闭此UE4工程程序;
第二步,在所述Content文件夹的同一个目录下新建文件,并夹命名为Plugins,复制上述创建工程的文件夹到所述Plugins文件夹下;
第三步,重新打开UE4工程程序,此时系统会提示是否需要重新编译,选择是,待编译完成之后自动进入场景;
第四步,创建Prefab系统,在上述打开的场景里创建多个Actor,并修改Actor的层级,保证层级的最上层只有一个Actor,然后用该最上层的Actor来创建Prefab系统;
第五步,修改Prefab系统,当在场景中修改了Prefab和子对象中的元素的属性之后,实际上只是修改了场景中创建的实例,而原始的Prefab Asset的数据并没有变化,如果继续这样使用就导致再次创建的实例并不是最新的数据;所以我们在修改了Prefab属性数据之后需要保存数据,点击LGUI Tools/Prefab/Apply Prefab就可以保存数据到PrefabAsset;
第六步,编辑器中加载Prefab系统,在场景中选择一个Actor作为父对象,从ContentBrowser中找到需要加载的Prefab Asset,选中并拖拽到场景中的任意位置,然后此Prefab将会显示在场景中;
第七步,运行时加载Prefab,首先需要获取Prefab Asset的引用并准备父对象的SceneComponent,使用c++代码或蓝图调用LoadPrefab接口并传入参数,然后此Prefab就加载到场景中。
2.根据权利要求1所述基于UE4平台的Prefab开发系统创建方法,其特征在于,创建所述的Prefab的方式有两种:第一种方式,选择工具栏上的LGUI Tools/Prefab/CreatePrefab;第二种方式,在场景大纲Scene Outliner的扩展栏上选择Prefab/Create Prefab,成功后会弹出对话框来选择需要保存Prefab的名称和位置,保存成功后在资源浏览器Content Browser中会显示保存的预制体资产Prefab Asset。
3.一种基于UE4平台的Prefab开发系统,其特征在于,所述的Prefab开发系统由序列化、反序列化、编辑器三大模块构成。
4.根据权利要求3所述的一种基于UE4平台的Prefab开发系统,其特征在于,所述的Prefab系统使用的数据存储方式包括两种,分别为:
第一种,变量名字符串作为key、变量值作为value的key-value无序存储,在编辑器版本可以方便修改变量名和类型,可以快速查找变量值;
第二种,按照成员变量的序列顺序,变量值作为二进制内容存储为有序数组,在运行时负责高效查找数据并反序列化。
5.根据权利要求3所述基于UE4平台的Prefab开发系统,其特征在于,所述的Prefab开发系统将按照以下步骤执行:
①Prefab系统会根据根物体Actor递归查找所有的子Actor,当收集到所有的Actor之后就遍历每个Actor中的标为UPROPERTY的成员变量并暂存到列表;
②对于每个Actor,查找此Actor中挂载的所有组件Component,当收集到所有Component之后就遍历每个Component中标记为UPROPERTY的成员变量并暂存到列表;
③对于暂存的所有的成员变量,给每个变量按照类型分类:引用类型、值类型、字符串类型,另外还有个特殊的类型Instanced Object;
④变量分好类型之后就可以按照类型来存储变量值,为了统一存储格式,所有的值类型都用字节数组来存储,引用类型用Object数组存储,字符串类型用String数组存储;而Instanced Object会先拆分为Class存储到Object数组,然后再把成员变量按照Actor/Component相同的方式序列化存储,反序列化的技术点类似,只是反过来将存储变为查询-读取-赋值,这里不再赘述。
CN202010715237.3A 2020-07-23 2020-07-23 一种基于UE4平台的Prefab开发系统及创建方法 Pending CN111930362A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010715237.3A CN111930362A (zh) 2020-07-23 2020-07-23 一种基于UE4平台的Prefab开发系统及创建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010715237.3A CN111930362A (zh) 2020-07-23 2020-07-23 一种基于UE4平台的Prefab开发系统及创建方法

Publications (1)

Publication Number Publication Date
CN111930362A true CN111930362A (zh) 2020-11-13

Family

ID=73315271

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010715237.3A Pending CN111930362A (zh) 2020-07-23 2020-07-23 一种基于UE4平台的Prefab开发系统及创建方法

Country Status (1)

Country Link
CN (1) CN111930362A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113191124A (zh) * 2021-05-20 2021-07-30 上海曼恒数字技术股份有限公司 一种基于3d引擎的运行时编辑方法及系统
CN116126429A (zh) * 2022-12-06 2023-05-16 谷斗科技(上海)有限公司 一种非数据类型对象的引用持久化及其恢复的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106201510A (zh) * 2016-07-11 2016-12-07 山东科技大学 一种ue4粒子系统与外部数据的通信方法
US9891910B1 (en) * 2017-09-14 2018-02-13 Secret Location Inc. Systems and methods for pre-processing and runtime distribution of interactive content
CN109814848A (zh) * 2019-02-21 2019-05-28 广州卓远虚拟现实科技有限公司 一种虚拟现实通用动感引擎
US20190272672A1 (en) * 2017-02-09 2019-09-05 Tencent Technology (Shenzhen) Company Limited Curved surface model generation method and apparatus

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106201510A (zh) * 2016-07-11 2016-12-07 山东科技大学 一种ue4粒子系统与外部数据的通信方法
US20190272672A1 (en) * 2017-02-09 2019-09-05 Tencent Technology (Shenzhen) Company Limited Curved surface model generation method and apparatus
US9891910B1 (en) * 2017-09-14 2018-02-13 Secret Location Inc. Systems and methods for pre-processing and runtime distribution of interactive content
CN109814848A (zh) * 2019-02-21 2019-05-28 广州卓远虚拟现实科技有限公司 一种虚拟现实通用动感引擎

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
LF2007HF: "LGUI 2.X 新特性", pages 1 - 6, Retrieved from the Internet <URL:https://blog.csdn.net/lf2007hf/article/details/98736400> *
LF2007HF: "在UE4里制作3D UI(三)——使用Prefab", pages 1 - 4, Retrieved from the Internet <URL:https://blog.csdn.net/lf2007hf/article/details/90550051> *
伍双: "面向虚拟教育的VR内容制作系统的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》, pages 138 - 2099 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113191124A (zh) * 2021-05-20 2021-07-30 上海曼恒数字技术股份有限公司 一种基于3d引擎的运行时编辑方法及系统
CN116126429A (zh) * 2022-12-06 2023-05-16 谷斗科技(上海)有限公司 一种非数据类型对象的引用持久化及其恢复的方法
CN116126429B (zh) * 2022-12-06 2023-11-17 谷斗科技(上海)有限公司 一种非数据类型对象的引用持久化及其恢复的方法

Similar Documents

Publication Publication Date Title
US7130863B2 (en) Method for enhancing object-oriented programming through extending metadata associated with class-body class-head by adding additional metadata to the database
US6044217A (en) Hierarchical metadata store for an integrated development environment
US5659735A (en) Object-oriented system for program version and history database management system for various program components
EP0786109B1 (en) Object-oriented system for configuration history management
US7114149B2 (en) Navigation links in generated documentation
JP2004362595A (ja) データベースオブジェクトスクリプト生成方法およびシステム
CN111930362A (zh) 一种基于UE4平台的Prefab开发系统及创建方法
Buchmann et al. Handcrafting a Triple Graph Transformation System to Realize Round-trip Engineering Between UML Class Models and Java Source Code.
Orlov Control tools for reusable components of intelligent computer systems of a new generation
US9026985B2 (en) Dynamically configurable model-to-model transformation engine
Celms et al. DSL approach to deep Learning lifecycle data management
EP1292917A1 (en) Navigation links in generated documentation
Åkesson et al. Jatte: A tunable tree editor for integrated DSLs
Klein et al. Constructing SDEs with the IPSEN meta environment
Anwar et al. Blended metamodeling for seamless development of domain-specific modeling languages across multiple workbenches
JP3759630B2 (ja) スパイラル型オブジェクト指向ソフトウェアの開発支援システム
Nasiri et al. Generation of User Interfaces and Code from User Stories
Possompès et al. A UML profile for feature diagrams: Initiating a model driven engineering approach for software product lines
Jörges et al. Exploiting ecore's reflexivity for bootstrapping domain-specific code-generators
US20230289151A1 (en) Generation and consumption of templates based on source code examples
Rogier et al. The EQUIP System: A Product Type Modeling System Developed With The MAM Method.
Wolffgang Multi-platform Model-driven Software Development of Web Applications.
EP1290553A1 (en) Methods and systems for finding and displaying linked objects
Orlov et al. Current State of ostis-systems Component Design Automation Tools
Deveaux et al. XML support to design for testability

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination