ue4读取外部数据_一种UE4粒子系统与外部数据的通信方法与流程

本发明属于虚拟现实领域,具体涉及一种UE4粒子系统与外部数据的通信方法。

背景技术:

Unreal Engine4(以下简称为UE4)是Epic Games公司最新推出的虚幻引擎,是一款用于三维场景构建的虚拟现实软件,使用该引擎可以制作游戏、动画、虚拟现实在内的众多内容,同样也可以用于室内设计、军事模拟等诸多产业。在可视化的编辑窗口中,开发人员可以直接对虚拟场景中的物体进行自由的摆放和属性的控制,并且都是实时渲染。UE4同时提供了百分之百开放的源代码,可以让开发人员开发类来实现想要的结果。这些都使得UE4可以更好的来模拟现实生活中的场景和事件并与外界实时的交互。

UE4同时提供了强大的粒子系统,可以更好的用来模拟例如云、火、植物等不规则的自然景物。粒子系统不同于以往的三维建模技术,它把模拟的场景分解成许多随机分布的微小粒子,每个粒子都有属于自己的属性并且随着时间的推移不断变化,从而可以动态的模拟自然场景的变化。粒子系统的基本思想是:将需要模拟的场景分解成大量的点粒子、线粒子或面粒子,通过控制大量粒子的运动轨迹从而模拟出场景的动态变化。其中每个粒子都有自己的属性,具体的属性特点由需要模拟的场景决定。粒子效果的改变就是通过修改粒子的参数实现的。

当前UE4提供的一些粒子特效中,能够很逼真的模拟绝大多数的特效效果,这些特效效果涉及到的都是UE4内部与内部的数据传输,这对UE4的开发是不够的,一些基于UE4的现实场景的模拟也无法达到实时的逼真效果。而在粒子系统的研究中,火、烟雾等不规则物体的算法是其中的研究重点,而在将算法得到的数据转化为实时模拟的过程中,通信成为了其中的重点部分,如果缺乏与外部数据的通信,该学术的研究价值将会大打折扣,也无法更真实的模拟自然景物。

技术实现要素:

针对现有技术中存在的上述技术问题,本发明提出了一种UE4粒子系统与外部数据的通信方法,设计合理,克服了现有技术的不足,具有良好的推广效果。

为了实现上述目的,本发明采用如下技术方案:

一种UE4粒子系统,包括多个发射器,每个发射器发射特定的粒子,多个发射器共同发射的粒子组成一个完整的粒子系统。

此外,本发明还提到一种UE4粒子系统与外部数据的通信方法,采用如上所述的UE4粒子系统,按照如下步骤进行:

步骤1:每个发射器包含不同的模块,通过添加、删除模块改变粒子的动态,通过点击模块了解模块内参数的数据类型,通过改变参数的大小观察粒子系统模拟效果的改变;

步骤2:在UE4的编辑器中创建初始状态的粒子系统

根据需要在粒子系统中添加若干发射器,在每个发射器中添加包括Required模块、Spawn模块、Lifetime模块、InitialSize模块、InitialVelocity模块、Color模块在内的模块;

步骤3:新建C++类并绑定步骤2中创建的粒子系统

步骤3.1:新建C++类

步骤3.1.1:打开UE4编辑器,新建C++类,继承Actor父类;

步骤3.1.2:新建C++类后,UE4自动打开Microsoft Visual Studio,并搭建好基本的程序框架,生成类的.cpp和.h文件;

步骤3.2:绑定粒子系统

步骤3.2.1:找到粒子系统的路径;

步骤3.2.2:在C++类的.cpp文件中通过Cast函数绑定步骤2中创建的粒子系统;

步骤4:在Microsoft Visual Studio中编写修改粒子系统参数的接口函数

步骤4.1:打开UE4的安装位置,阅读粒子系统的源码程序,找到粒子系统的运行模式,找到粒子系统中关于参数的函数;

步骤4.2:编写接口函数

步骤4.2.1:通过MyEffect->Emitters[i]函数找到要修改的发射器;

步骤4.2.2:通过MyEmitter->LODLevels[i]函数找到发射器中要修改的模块,在模块下找到要修改的参数,将接口函数中接收的数据赋值给要修改的参数,不同的参数对应不同的接口函数,其中接口函数接收的数据类型要和修改的参数的数据类型一致;

步骤5:编写函数读取文本数据

步骤5.1:找到UE4的平台文件接口

在UE4的源码程序中找到IPlatformFile的源代码,并找到IPlatformFile的接口;

步骤5.2:在txt文件中设置好要读取的文本文件的格式;

步骤5.3:编写文本接口函数:在.cpp文件中编写读取文本的函数

步骤5.3.1:找到读取的文本文件的路径,通过FPlatformFileManager函数绑定文本文件;

步骤5.3.2:将文本文件中的数据通过LoadFileToString函数缓存下来并转换成字符串格式;

步骤5.4:读取文本数据

步骤5.4.1:根据空格读取一行中的每一个数据;

步骤5.4.2:通过Atof函数将读取的数据转换成参数所需要的数据类型,赋值给粒子系统接口函数中接收的参数;

步骤5.4.3:读取完一行后,紧接着读取下一行直到最后一行;

步骤5.4.4:最终读取完整个文本中的数据,实现粒子系统与外部数据的通信。

本发明所带来的有益技术效果:

本发明提出了一种UE4粒子系统与外部数据的通信方法,与现有技术相比,本发明实现了UE4与外部数据的通信,可以通过外部的数据控制粒子系统的模拟效果,既可以更加逼真的模拟现实生活中的场景和事件,也极大的提高了模拟的实时性;在学术研究中,也可以将算法得出的数据传递到粒子系统中,以可视化的形式展现出来,增加了学术价值。

附图说明

图1为本发明一种UE4粒子系统与外部数据的通信方法的流程框图。

具体实施方式

下面结合附图以及具体实施方式对本发明作进一步详细说明:

实施例1:

一种基于文本文件的UE4粒子系统,包括多个发射器,每个发射器发射特定的粒子,多个发射器共同发射的粒子组成一个完整的粒子系统。

实施例2:

在上述实施例的基础上,本发明还提到一种基于文本文件的UE4粒子系统与外部数据的通信方法(如图1所示),按照如下步骤进行:

步骤一:添加或删除粒子系统的发射器、发射器模块,改变模块参数,观察模拟效果。

在UE4粒子系统的编辑界面中,添加或删除粒子系统的发射器以及发射器的各个模块,改变参数,观察模拟效果。粒子系统由多个发射器组成,每个发射器发射特定的粒子,多个发射器共同发射粒子组成一个完整的粒子系统。每个发射器包含不同的模块。可以通过添加、删除模块改变粒子的动态。点击模块后可以在细节面板中了解参数的数据类型,通过改变参数的大小观察粒子系统模拟效果的改变。粒子的基本属性主要有以下几种:

Material:存在于Required模块,是应用在粒子中的材质,材质做的越逼真,粒子系统模拟的越精确。

Rate:存在于Spawn模块,指的是粒子的生成率,也就是粒子系统每秒发射的粒子数量。通过改变粒子的Rate,可以改变整个粒子系统的大小以及发射的密集度。

Lifetime:存在于Lifetime模块,单个粒子的生命周期(以秒为单位),数值越大,粒子存活时间越长。

StartSize:存在于InitialSize模块,指的是粒子的初始大小,通过改变StartSize的数值,可以分别改变粒子在(x,y,z)三个方向的大小。

StartVelocity:存在于InitialVelocity模块,指的是粒子的初始速度,通过改变StartVelocity的数值,可以分别改变粒子在(x,y,z)三个方向的速率。

ColorOverLife:存在于Color模块,指的是粒子的颜色随时间的的变化而变化。

AlphaOverLife:存在于Color模块,指的是粒子的透明度随时间的的变化而变化。

步骤二:在编辑器中创建粒子系统

在UE4编辑器中创建粒子系统,根据需要添加发射器,在发射器中添加相应的模块。目标参数(通过接口函数将要改变的参数)设置好初值,创建一个初始状态的粒子系统。

步骤三:新建C++类并绑定之前创建的粒子系统

1、新建C++类

打开UE4编辑器,新建C++类,继承Actor父类。

创建C++类后,UE4会自动打开Microsoft Visual Studio(以下简称VS),并搭建好基本的程序框架,生成类的.cpp和.h文件。

2、绑定粒子系统

找到粒子系统的路径,在C++类的.cpp文件中通过Cast(StaticLoadObject(UParticleSystem::StaticClass(),NULL,*EffectName.ToS tring()))函数(该函数通过路径找到创建的粒子系统,其中EffectName为粒子系统的路径)绑定之前创建的粒子系统。

步骤四:编写粒子系统的接口函数

1、找到粒子系统的运行模式及参数函数

绑定粒子系统后,打开UE4的安装位置,在Epic\Games\4.9\Engine\Source\Runtime\Engine\Classes\Particles文件夹中找到粒子系统的源码程序,找到粒子系统的运行模式和粒子系统中关于参数的函数。

2、编写接口函数

在VS中编写修改粒子系统参数的接口函数。每一个参数对应一个粒子系统的接口函数。其中接口函数可以接收数据参数。在接口函数中,通过MyEffect->Emitters[i]函数(定位粒子系统中的发射器)找到要修改发射器Emitters[i],在发射器中通过MyEmitter->LODLevels[i]函数(定位发射器中的模块)找到要修改的模块Module,在模块下找到要修改的参数。将接口函数中接收的数据赋值给要修改的参数。不同的参数对应不同的接口函数。其中接口函数接收的数据类型要和修改的参数的数据类型一致。

步骤五:编写函数读取文本数据,实现外部数据与粒子系统的通信

1、找到UE4平台文件接口

UE4中进行文件I/O操作时为了其可移植性所以不能直接使用C++标准库,UE4提供了IPlatformFile(平台文件I/O接口)。在UE4的源码程序中找到IPlatformFile的源代码以及IPlatformFile的接口模式。

2、设置文本中数据格式

首先要在txt文件中设置好读取的文件的格式。UE4中可以通过空格、换行等区分数据。在文本文件中,数据的数据类型为浮点型。每一行的数据表示要修改的参数,例如,每一行的第一个数据是要修改的速率,第二个到第四个数据是要修改的初始大小……每个数据与数据之间通过空格隔开。

3、编写文本接口函数

在.cpp文件中编写读取文本的函数。首先找到读取的文本文件的路径,通过FPlatformFileManager::Get().GetPlatformFile().FileExists(*CompleteFilePath))函数(管理文本的函数,通过路径绑定文本文件,其中CompleteFilePath为文本的路径)绑定文本文件。将文本文件中的数据通过LoadFileToString函数(将文本中的数据缓存成字符串的格式)缓存下来并转换成字符串格式。

4、读取文本数据

根据空格("")读取一行中的每一个数据,将数据通过Atof函数(转换数据格式的函数)转换成参数所需要的数据类型,赋值给粒子系统接口函数头中接收的参数。读取完一行后,根据换行T("\n")读取下一行直到最后一行。最终读取完成整个文本中的数据,实现粒子系统与外部数据的通信。

本发明实现了UE4粒子系统与外部数据的通信,可以通过外部的数据控制粒子系统的模拟效果,既可以更加逼真的模拟现实生活中的场景和事件,也极大的提高了模拟的实时性;在学术研究中,也可以将算法得出的数据传递到粒子系统中,以可视化的形式展现出来,增加了学术价值。

当然,上述说明并非是对本发明的限制,本发明也并不仅限于上述举例,本技术领域的技术人员在本发明的实质范围内所做出的变化、改型、添加或替换,也应属于本发明的保护范围。

你可能感兴趣的:(ue4读取外部数据)