虚幻4 汽车行驶如何产生扬尘和溅水的效果

关键词:unreal4、虚幻4、汽车、扬尘、溅水、粒子效果

 

实现思路:通过在四个车轮的底部添加四个ParticleSystem,并通过blueprint控制粒子系统的施放逻辑。

 

一、虚幻4汽车在沙地上行驶时,如何扬起尘土?

 

A.首先,需要先把粒子效果制作出来,可以参考官方学习教程的”赛车游戏”里开车时的粒子效果。

 

  

将赛车游戏下载下来后,创建工程。

 

 

创建后可试玩,看一下效果。

 

 

B.World Settings找到GameMode模块,点击右边的查找图标,查找默认的PawnClass并打开。

 

 

 

打开该蓝图,发现并没有粒子component在上面。

 

 

重新运行,并在World Outliner,点击Type标头排序,快速找到VH_Buggy

 

 

点击查看该蓝图的细节,可看到有四个粒子component,应该是动态生成的。

 

 

点击其中一个粒子component,运行时不可对其进行查找操作,可在Content Browser窗口中点击content文件夹,并在右边的搜索框中搜索Particle(粒子的英文),可找到扬沙子的Particle System

 

 

C.此时可停止运行游戏,此处需要用到的是扬沙的效果和溅水的效果。

 

 

选中两个粒子,在其中一个目标上鼠标右键->点击AssetActions->点击Migrate

 

 

弹出AssetReport窗口,点击Ok

 

 

弹出选择储存路径,最好是选择自己工程的根目录Content文件夹下,如果选择的不是根目录会弹出提示并且材质会丢失。

 

 

如果自己的content文件夹下已经有同名文件夹但是不想同步到里面,也可以储存在别的地方,但是会丢失材质,需要重新去绑定。

 

导出后右下角会弹出成功提示,并可在自己的工程中看到一个新的文件夹Effects,这个是赛车游戏储存的文件夹,导过来后,可自己再对里面的东西进行移动。

 

 

打开自己的工程,应在Content/.../Effects/Effects/VehicleEffects/下找到两个particle system,打开查看一下,是否有材质丢失,如果丢失对比两个工程的粒子系统重新绑定材质。

 

 

此处有几点要说明一下

1.Migrate选项导出,会把相关联的MaterialTexture等等一起导出来,导出的是一个文件夹。

2.赛车游戏的创建时的虚幻版本要选跟你工程的虚幻版本一致,否则有可能导过去后,某些文件查不到(Windows文件夹看到了文件,但是虚幻里面的文件系统看不到)

3.一般丢失了的话,粒子会丢失material,而material会丢失texture,要从material开始重新绑定比较麻烦,所以建议还是直接导出到根目录content

 

D.找到自己车子的蓝图,打开并在Components标签页添加粒子component,此处建议先添加一个,调好位置后再复制,改一下坐标。

 

 

可以改变不同的视角和调整移动幅度,来调整,更方便准确。

 

 

根据喜好放置,此处本人放在轮胎底部的中心处。

 

 

完成第一个后,选中第一个粒子component,按下CTRL+W,创建剩下的,只需在top视角移动即可保证四个在同一水平面,并且同一水平线的componentY坐标应该一致,同一竖直线的componentX坐标应该一致。

 

 

Details面板的Particles模块的Template为四个粒子component绑定P_dirt_wheel_kickup粒子,可同时选中四个一次性绑定上去。

 

 

E.保存并运行游戏,可看到有一些黑点类似石子的粒子效果,下面会介绍如何去掉这个效果,希望使用默认效果可跳过这一步骤。

 

 

打开P_dirt_wheel_kickup,粒子编辑器的界面介绍和使用请参考

https://docs.unrealengine.com/latest/INT/Engine/Rendering/ParticleSystems/Cascade/index.html

 

此处禁用掉GritTire Track两个发射器,即可去掉石子的效果。

 

 

以下将说明一些会微调到的参数的作用,参数的说明可参考

https://docs.unrealengine.com/latest/INT/Engine/Rendering/ParticleSystems/Reference/index.html

 

1.Required模块主要是修改粒子发射器发射的Material

 

 

2.Spawn模块主要是修改Rate下的Distribution下的Constant,来调节喷出的粒子的速率,并在预览窗口查看到,此处因为用到Spawn PerUnit所以constant值设置为0

 

 

3.Spawn PerUnit模块会根据行进的距离进行发射粒子,这样车子停止时不会有粒子产生,但移动时会产生粒子。主要会修改到的是Unit ScalarSpawn Per Unit下的constant两个值,可以理解为每移动Unit Scalar个单位发射constant次粒子。其他参数参考官方文档。

 

 

4.Lift Time模块的两个值MinMax应该很好理解,粒子的最小存在和最大存在时间。

 

 

5.Initial Size模块的Min值和Max值分别是修改粒子的最小体积和最大体积。

 

 

6.Initial Velocity模块会修改到的是Min值、Max值和In World Space选框,不同方向的最大和最小速度矢量以及是否是以世界坐标系为标准。

 

 

7.Initial Rotation模块MinMax同上面意思一样就是粒子出生时的最小和最大值,此处注意一个就是1表示旋转360°。

 

 

8.Size By Life模块有需要请参考官方文档,主要是粒子的生命周期内按设置的不同的比例缩放体积大小(在之前Initial Size的基础上),例如此处设置(5,1,1)(1,1,1),粒子会以(5,1,1)的比例产生,然后会缩小到(1,1,1)的比例。

 

 

9.Acceleration模块是设置加速度的,constant值和In World Space选框很好理解,就是沿着哪个轴的方向施加加速度以及是否是世界坐标为准。

 

 

10.Sphere模块是设置粒子产生位置的,Initial Color模块是设置产生时粒子的颜色,Scale Color/Life模块是设置粒子生命周期过程中的颜色变化,这几个此处略过不提,有需要参考文档。

 

F.此处是较快的得到扬尘的效果的做法,套用别人的粒子发射器,有条件深入学习粒子系统是最好的,此处调整完后,车子已经具备了扬尘的功能了,但是还有一些地方需要处理,因为SpawnPerUnit使用的是运动增量,会有可能出现,车子明明在移动但是粒子发射器没有发挥作用。

 

在车子的蓝图里写或者创建一个SceneComponent然后添加到车子的component列表里面。

 

 

先创建一个Particle System Component(粒子系统组件)的数组,用于存放四个粒子发射器,好做批量处理。

 

 

再创建一个Wheel Vehicle Movement Component 4W的变量,根据你车子的车轮类型即可,用于获取车子前进后退状态。

 

 

再创建一个存放车子当前状态的int变量。

 

 

在游戏开始时储存四个粒子发射器和一个车轮移动组件到对应的变量中。

 

 

车子前进时沙子应朝后面飞起,后退时沙子应向前面飞起,停止时应把粒子清除掉,不然刹车停止时,粒子还会再飞一会。每个tick获取一次车子状态。

 

 

Sequence第一个出口判断车子当前的forward方向的速度是否大于零并且车子速度的标志位CarVelocityFlag如果不是1说明之前的状态不是前进状态现在是前进状态,就调用改变粒子发射器方向的方法。

 

 

Sequence第二、三个出口,同理,不做赘述。

 

 

以下是ChangeParticleDirection方法,前进时沿Y轴转动45°,粒子发射器们斜朝车后,后退时沿Y轴转动-45°,发射器们斜朝车前,此处的粒子效果是朝上喷射的,转动Y轴角度即可斜向喷出。

 

 

以下是ClearParticle方法,将粒子系统的ParticlesTemplate设置为None即可。

 

 

车子扬尘的效果到这里就完成了。

 

二、虚幻4汽车在浅水上行驶时,如何溅起水花?

A.操作步骤跟车子扬尘的操作步骤差不多,打开P_water_wheel_kickup粒子系统

 

 

添加一个Spawn PerUnit来根据移动量来决定Spawn的量,把SpawnRate改成0

 

 

启用另一个Initial Velocity,或者在原先启用的Initial Velocity上修改,水花向X轴的负方向喷射,向上或者向斜向上根据需要修改。

 

 

其他参数根据上方的E.中的参数简述或者参考官方文档进行修改。

 

B.接下来在车子的蓝图中或者是在上面创建的SceneComponent里,创建一个bool变量来标志当前地面类型和创建一个方法用来切换不同粒子系统。

 

 

在之前改变粒子朝向的方法里再添加一个判断来修改水喷射的朝向,此处像粒子初始的发射方向以及车子前进后退时粒子发射器的旋转可根据实际调整。

 

 

创建一个新蓝图,并在在Component面板添加一个Box Collision

 

 

切换到Event Graph窗口,如果之前使用的是SceneComponent蓝图,游戏开始时需要获取一下车子Component面板中挂载的SceneComponent。此处本人的车子名字是BP_XM_CarCar4_ChildSceneComponent蓝图名字是ControlCarParticles_SceneComponent

 

 

Component面板中的BoxCollision添加进入和离开时的事件,判断是否是这辆车,是就设置标志位并调用方法。进入时就修改粒子为水的,出去就修改为沙子的。

 

 

将这个水域检测的蓝图拖到场景中,并调整大小,具体形状、大小根据需要调整。

 

 

到此溅水的功能就完成了,此处换用另一台车,效果如下。

 

 

 

 

 

 

 

 

 

有条件FQ可参阅这个粒子视频

https://docs.unrealengine.com/latest/INT/Videos/PLZlv_N0_O1gYDLyB3LVfjYIcbBe8NqR8t/OXK2Xbd7D9w/index.html

或者国内B

https://www.bilibili.com/video/av11697692/

posted @ 2018-01-28 11:14  黄进钿  阅读(1793)  评论(0编辑  收藏  举报