CN111930362A - 一种基于UE4平台的Prefab开发系统及创建方法 - Google Patents
一种基于UE4平台的Prefab开发系统及创建方法 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation 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平台上的可复用的模块化的工作方式主要是依靠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相同的方式序列化存储,反序列化的技术点类似,只是反过来将存储变为查询-读取-赋值,这里不再赘述。
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)
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)
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 |
-
2020
- 2020-07-23 CN CN202010715237.3A patent/CN111930362A/zh active Pending
Patent Citations (4)
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)
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)
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 |