导图:

字数:共3678字
简介:
【1】动画轨迹——Spline BP其实跟我们之前在Blender当中用Bezier Curve创建物体运动路径,并对物体用 Follow Path Constraint来绑定,使物体在Curve上运动是一样的效果。
【2】程序化模型——Blender Array Modifier复制克隆物体——UE4 Spline BP For Loop构造函数复制路灯/轨道等物体
X Tesla:【Blender 】厕纸(听说老美的厕纸都脱销了?不够记得来Blender取啊)zhuanlan.zhihu.com
开头先放些视频,好让大家对文章有个基础了解,不想看下面细节实现的看看视频就行了,知道有这么个东西,以后需要的时候再拐回来找,再仔细了解研究也是可以的。




【5】粒子特效Spline待续

一、简要介绍Construction Scirpt蓝图构造函数
操作:
- 创建Actor BP
- 创建Construction Script
如果不了解Construction Script的话,这里可以简单通俗化介绍一下:
- Event Graph当中的Begin Play是当你Alt+P/点击Play button播放预览游戏后开始执行一遍的(可分屏测试,播放后看到红线从蓝图各节点经过)
- Construction Script就是一旦你将现在这个创建好的BP拖拽到场景当中,比如设置坐标选装等,不需要点击Play就直接在世界场景当中执行,被调用一次的。(每当我们更改细节列表内相关参数(位置、旋转、大小)的时候,它又会被执行一次)
我们可以先写一个很简单的蓝图:


了解了基本的蓝图构造函数之后,我们就可以添加Spline ,来制造各种弯曲的程序化模型了。

二、Spline Component 具体程序化模型实现过程:
- 在蓝图当中添加Spline Component
哎呀,Blender GRS 挺习惯的,UE4 WER,就说怎么不管用呢,怪不得( )
【2.1】UE4 Spline 操作快捷键
这个Spline 跟我们Blender当中的Bezier说过了是挺类似的:(Bezier的相关操作那篇厕纸文章里面有)
这里说一下UE4 Spline的操作方式:
- 白色为中心点
- W移动点位置
- E调节曲线弯曲程度
- R控制曲线大小
- 红色为两端点
- W移动调节曲线弯曲程度
- RS 没有卵用
- 增删点
- Alt+挪动中心点位置(W移动模式)——添加
- Delete 删除点——删除(这点很不爽,Blender的X单手操作多方便啊)
【2.2】填写相应蓝图
注意哦:
- 我们蓝图当中的Spline Component只提供曲线(也叫做贝塞尔曲线吧,跟Blender一样)
- 我们的Add Spline Mesh Component节点却拥有诸多参数(设置Mesh、方向、碰撞等都是它)


【2.3】制造管道Pipe以进行测试
我们可以先在Blender当中做一个管道:
Pipe管道建模流程:
- 创建一个Cylinder圆柱
- S Z 2
- R X 90
- G Z 1
- Tab Edit Mode
- 3 进入面模式
- Shift加选两个侧圆面
- Shift+D 复制
- 右键取消选择
- S Shift+Y 1.2
- 2 进入线模式
- Alt+Shift+鼠标左键选中外面的圆和圆柱的侧面循环线(左右两个哦)
- E 挤出0.2m
- A选中全部面
- 右键Subdivide 设置为10次
- Tab退出Edit Mode
- 右键Shade Smooth
- 添加Edge Split Modifier并应用(让模型更平滑)
- Tab进入Edit Mode
- 导出命名为Pipe(不是Papi )
- 导入模型
- 创建材质给一个淡淡的黄颜色(R:0.5、G:0.25、B:0)
- 将材质给到Pipe Static 模型上面

【2.4】最终测试
- 然后我们可以把我们刚刚填好的Spline_BP拖拽到场景当中
- 将Pipe拖拽到Added Mesh下面
- 调整Forward Axis(我这里是调整成了Y轴,自己根据模型朝向进行调整)

当然你也可以将Added Mesh替换为 (键入Spline Editor Mesh),换成道路、轨道、屋梁等等都可以,毕竟曲线在那里,换成什么Mesh都行。
【2.5】给管道添加碰撞
当然你也可以给Pipe添加碰撞,
- 打开Static Mesh Pipe
- Collision ->Auto Convex Collision
- Apply
- 可以将蓝图内的碰撞提升为变量,设置为Collision Enabled

三、Camera Rig Rail 相机导轨(性质上还是Spline)
顺便说一下,我们的这个Camera Rig Rail本身实质上就是一个Spline,中文名叫导轨,现实生活当中导演们拍电影经常用这个导轨来制造镜头的平滑移动,在UE4当中我们可以用它来制作过场动画。
另外,你可以将你的模型或人物附着Attach在导轨上面,然后在定序器当中设置Current Position On Rail的值(0~1),就可以实现简单的动画效果了呢。

下面就给大家简单演示一下这个导轨的效果:
操作:
- 创建导轨拉线
- 创建摄影摄像机Attach到导轨上面并设置位置为000
- Cinematics->创建Level Sequence(定序器,挺别扭的)
- 添加导轨对象
- 设置Current Position On Rail(0~1)的关键帧,初始为0,末尾为1
- 设置镜头追踪对象->Actor to Track选中小白人
- 设置Offset至小白人的头部
- Enable Look At Tracking,允许追踪
- 设置聚焦对象(Focus Settings),选中小白人
- 渲染导出视频


四、人物循环走路/模型跟随曲线运动动画:(跟Blender的厕纸有点像哦)
我们可以让我们的角色沿着Spline进行走动,制造走动的动画(一般人物动作为Root根模式,只在原地运动)(后期你也可以改成汽车或其他模型,都可以的)
我们需要在Spline上设置两个变量:
- 人物 CharacterType——轨迹上有哪些人在上面进行运动(比如小白人、小红人、小黄人等等)
- 数量 NumberOfMoving——轨迹上总共有多少人在上面进行走动
【4.1】简要介绍WalkSpeed
我们在做TPS游戏的时候,或者是现在打开第三人称角色蓝图:(Character类型专有的Character Movement,里面有人物运动的各种参数,这里呢我们只取走动速度Walk Speed)

在动画蓝图当中需要Get角色运动的速度矢量长度作为角色的当前运动速度,通常是用于Blendshape进行停顿/走/跑三者相互混合切换状态。
如下: 达到不同的速度阈值,切换到不同的运动状态,最大速度是上图当中的Max Walk Speed=600。

【4.2】填写相应事件蓝图
我们搞得就只有行走状态,只涉及人物角色动画,并不涉及到动画蓝图之类的,所以没那么麻烦。
具体步骤:
【4.2.1】创建贝塞尔曲线蓝图(BP_Bezier)
类型:Actor
作用:这里呢只用于我们进行曲线各个点的编辑,跟Blender一样。
操作:我们先给它添加一个Spline Component好了
【4.2.2】我们建立一个角色根蓝图(BP_ParentCharacter)
类型:Character
作用:用于计算角色的运动方向旋转等等
注意:
- 记得要转换为世界空间
- Distance Along Spline(这里的值不是像上面导轨说过的是0~1之间的,而是根据Bezier曲线放在场景当中的位置(一般是起点的位置)而进行偏移的)
【4.2.2.1】函数:绑定轨迹点和角色的坐标
- 创建一个函数,填写以下蓝图
- 创建一个变量,类型为BP_Bezier
- 获取Spline Component变量
- 角色高度始终不变,所以设置角色高度为当前值。
- 设置曲线上各位置的 坐标和旋转方向 为 当前角色 的 坐标和旋转方向(曲线和角色进行绑定)

【4.2.2.1】初始事件:设置角色初始走动速度
- 事件蓝图当中设置初始事件,设置角色走动速度,200 cm/s 就可以

【4.2.2.2】函数:更新角色在曲线上的相对距离
- 创建一个新函数
- Axis Value为 1/-1,确定角色运动方向(记得要设置哦,不要默认为0)
- Get World Delta Seconds,获取每一帧,大概为0.01s~0.02s不等,根据引擎特性,不是一个定值。(自己可以Event Tick Print String检验)
- 不断更新角色在曲线上的相对距离(相对于起始点)

【4.2.3】从ParentCharacter那里继承一个子蓝图(BP_SplineCharacter)
作用:用于判断我们的角色是不是到达了终点(可以不用继承,直接将下述蓝图放在父类ParentCharacter蓝图当中也可以的)
类型:BP_ParentCharacter
操作:
- 每一帧调用我们父类蓝图里面的定义好的两个函数(上面两个紫色的节点)
- 计算我们的角色是不是到达了曲线的终点(用Spline Length曲线总长度进行对比),如果是的话,从头开始,设置Along Spline为0.

【4.2.4】从SplineCharacter那里继承一个子角色蓝图,以设置我们的角色自定义蓝图
作用:用于自定义各类角色(小白人、小黄人、小红人等等)
【4.2.4.1】设置角色Skeletal Mesh
- 在上面的BP_SplineCharacter右键CreateChildBlueprint Class(或在蓝图内Class Settings进行更改父类)
- 在这里我们可以添加我们角色的Skeletal Mesh还有他们的角色动画(包括角色动画蓝图等等)(注意要将Skeletal Mesh的位置挪至胶囊体内(还有朝向),碰撞检测需要用到,因为Skeletal Mesh不像Static Mesh那样Auto Convex可以自动生成碰撞,所以胶囊体就是充当这样一个碰撞盒体检测的作用)
【4.2.4.2】设置小白人动画蓝图当中的事件蓝图
添加小白人动画蓝图,选小白人UE4的官方骨骼
填写以下动画蓝图当中的事件蓝图(Event Graph):
目的:引用角色蓝图当中的速度变量

【4.2.4.3】添加并设置小白人的BlendSpace(停下/走动)
- 右键创建一个小白人的BlendSpace 1D
- 设置下图中中的参数(将动画序列拖拽至其上)
【4.2.4.4】设置小白人的动画蓝图当中的动画蓝图
设置动画蓝图当中的动画蓝图(Anim Graph)
目的:将角色蓝图当中的速度变量和我们混合空间BlendSpace(决定Idle还是Walk)进行相关联。

【4.2.4.5】选取我们刚刚设置好的角色动画蓝图
回到BP Spline Character当中把AnimClass设置为当前动画蓝图(使用动画蓝图模式)
【4.2.4.6】添加材质球并设置材质参数以获得不同颜色的官方角色
你可以设置多个不同的Spline Character,在这里呢,我暂时没有很多角色,索性就给Spline Character给上一个材质实例接口,用于产生不同皮肤颜色的官方人物
(将材质当中的三维常量颜色转为参数,以便在蓝图中更改相应的参数。)(仅为了简单测验)

在子蓝图当中勾选显示继承变量,这样就可以看到我们的Character Color变量了。

调整颜色后,这是我们最终的所有文件(注意不要习惯性地在右边细节栏里调控,因为我们没打算往场景当中放置 )

【4.2.5】回到BP_Bezier 当中添加相关参数
好了,我们需要再回到BP_Bezier当中,设置我们的角色,这里呢,我们添加一个SplineCharacter类数组(注意:不是Object,
- Object是要选取场景当中的物体(直接放置生成的)——蓝色
- Class 是直接在我们的内容浏览器当中选择相应的类(原先场景当中没有的)——紫色
)

然后再添加一个角色数量 int变量——以设置该曲线上共有多少个角色在走。
【4.2.6】添加BP_Spawner以设置场景当中的特定曲线上的特定角色(间距、种类等等)
然后我们可以添加一个BP_Spawner
目的:
- 用于控制我们每个角色之间的距离
- 如果场景中有多个BP_Bezier的话,可以进行一些处理

Get All Actors Of Class,获取场景当中所有的Bezier曲线,然后执行上面的函数。

【4.3】向场景当中添加设置我们写好的相应蓝图
- 我们把BP_Bezier 蓝图放置到场景当中,添加红绿蓝等角色,设置数量为7。
- 然后拖拽点成相应的曲线,如上图左上角当中的曲线就可以。
- 曲线最后记得要【End】放在地上哦。
- 将BP_Spawer放置到场景当中,(当play的时候,直接开始执行蓝图事件)
大功告成:
右边的曲线,我是旋转左边的轨迹X(Roll)转了180,结果头在地上走,感觉也挺好玩的。

当然这种角色按照路径走动 你也可以直接用 AI Move To写行为树来操作。以上只是Spline的一些应用

五、粒子特效中 Spline的应用
待续