swiftui动画之tab自定义切换动画_【UE4】Spline BP 程序化模型/动画轨迹(爆肝般的详细)...

导图:

2b5abe18aedc5e5cae9b2151303e4fc9.png

字数:共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
0b56e3d2bbe0ce072a8056550c88dcb8.png

开头先放些视频,好让大家对文章有个基础了解,不想看下面细节实现的看看视频就行了,知道有这么个东西,以后需要的时候再拐回来找,再仔细了解研究也是可以的。

c9f7bec8c14e9f33db7675328ebf3d4a.png
【1】程序化模型(直线)https://www.zhihu.com/video/1236373032727216128
8ef7d23e6af8b73ee3af28b8af491dc5.png
【2】Spline BP程序化模型(曲线https://www.zhihu.com/video/1236373279562502144
f2cce7dc92dfc0afe45dc314b04cc191.png
【3】导轨来制作过场动画https://www.zhihu.com/video/1236373517476081664
c1a5823024656036ec3db31979615d89.png
【4】让角色跟着Spline路径走动https://www.zhihu.com/video/1236373862012370944

【5】粒子特效Spline待续

04a2cddd82345c8a1866648632a7334f.png

一、简要介绍Construction Scirpt蓝图构造函数

操作:

  1. 创建Actor BP
  2. 创建Construction Script

如果不了解Construction Script的话,这里可以简单通俗化介绍一下:

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

我们可以先写一个很简单的蓝图:

4e55c07d471890aae895b2da4e3f8af8.png
049a97a74a94a2d2010b44cda2032dca.png
【UE4】Construction Scripthttps://www.zhihu.com/video/1236280418988740608

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

cd4c999b32698554e5ffbe5a807d36cb.png

二、Spline Component 具体程序化模型实现过程:

  1. 在蓝图当中添加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】填写相应蓝图

注意哦:

  1. 我们蓝图当中的Spline Component只提供曲线(也叫做贝塞尔曲线吧,跟Blender一样)
  2. 我们的Add Spline Mesh Component节点却拥有诸多参数(设置Mesh、方向、碰撞等都是它)

13d7b4fd97acfdc14cac201def33e435.png

e4069bc705e774be390b8a1e0edbcebe.png

【2.3】制造管道Pipe以进行测试

我们可以先在Blender当中做一个管道:

Pipe管道建模流程:

  1. 创建一个Cylinder圆柱
  2. S Z 2
  3. R X 90
  4. G Z 1
  5. Tab Edit Mode
  6. 3 进入面模式
  7. Shift加选两个侧圆面
  8. Shift+D 复制
  9. 右键取消选择
  10. S Shift+Y 1.2
  11. 2 进入线模式
  12. Alt+Shift+鼠标左键选中外面的圆和圆柱的侧面循环线(左右两个哦)
  13. E 挤出0.2m
  14. A选中全部面
  15. 右键Subdivide 设置为10次
  16. Tab退出Edit Mode
  17. 右键Shade Smooth
  18. 添加Edge Split Modifier并应用(让模型更平滑)
  19. Tab进入Edit Mode
  20. 导出命名为Pipe(不是Papi )
  21. 导入模型
  22. 创建材质给一个淡淡的黄颜色(R:0.5、G:0.25、B:0)
  23. 将材质给到Pipe Static 模型上面

63a190bb302a1f404d73ac4e9e7e48d2.png

【2.4】最终测试

  1. 然后我们可以把我们刚刚填好的Spline_BP拖拽到场景当中
  2. 将Pipe拖拽到Added Mesh下面
  3. 调整Forward Axis(我这里是调整成了Y轴,自己根据模型朝向进行调整)
0e5094d0402dd6abbea5ec9bd60a605c.png
【UE4】Spline Mesh Pipehttps://www.zhihu.com/video/1236299529836273664

当然你也可以将Added Mesh替换为 (键入Spline Editor Mesh),换成道路、轨道、屋梁等等都可以,毕竟曲线在那里,换成什么Mesh都行。

【2.5】给管道添加碰撞

当然你也可以给Pipe添加碰撞,

  1. 打开Static Mesh Pipe
  2. Collision ->Auto Convex Collision
  3. Apply
  4. 可以将蓝图内的碰撞提升为变量,设置为Collision Enabled

b2ce21a6fdabc23e698b222bab03ed9d.png

三、Camera Rig Rail 相机导轨(性质上还是Spline)

顺便说一下,我们的这个Camera Rig Rail本身实质上就是一个Spline,中文名叫导轨,现实生活当中导演们拍电影经常用这个导轨来制造镜头的平滑移动,在UE4当中我们可以用它来制作过场动画。

另外,你可以将你的模型或人物附着Attach在导轨上面,然后在定序器当中设置Current Position On Rail的值(0~1),就可以实现简单的动画效果了呢。

fc7465c95d7040cd07e134515543383b.png

下面就给大家简单演示一下这个导轨的效果:

操作:

  1. 创建导轨拉线
  2. 创建摄影摄像机Attach到导轨上面并设置位置为000
  3. Cinematics->创建Level Sequence(定序器,挺别扭的)
  4. 添加导轨对象
  5. 设置Current Position On Rail(0~1)的关键帧,初始为0,末尾为1
  6. 设置镜头追踪对象->Actor to Track选中小白人
  7. 设置Offset至小白人的头部
  8. Enable Look At Tracking,允许追踪
  9. 设置聚焦对象(Focus Settings),选中小白人
  10. 渲染导出视频
6930f5f70a5ad4ecb3d17b05f0e354d6.png
【UE4】 Camera Rig Railhttps://www.zhihu.com/video/1236318369260679168

804628f024bc9becff99bea36bbaf530.png

四、人物循环走路/模型跟随曲线运动动画:(跟Blender的厕纸有点像哦)

我们可以让我们的角色沿着Spline进行走动,制造走动的动画(一般人物动作为Root根模式,只在原地运动)(后期你也可以改成汽车或其他模型,都可以的)

我们需要在Spline上设置两个变量:

  • 人物 CharacterType——轨迹上有哪些人在上面进行运动(比如小白人、小红人、小黄人等等)
  • 数量 NumberOfMoving——轨迹上总共有多少人在上面进行走动

【4.1】简要介绍WalkSpeed

我们在做TPS游戏的时候,或者是现在打开第三人称角色蓝图:(Character类型专有的Character Movement,里面有人物运动的各种参数,这里呢我们只取走动速度Walk Speed

8d57e2af02b1d5442289d935c2cd12a7.png

在动画蓝图当中需要Get角色运动的速度矢量长度作为角色的当前运动速度,通常是用于Blendshape进行停顿/走/跑三者相互混合切换状态。

如下: 达到不同的速度阈值,切换到不同的运动状态,最大速度是上图当中的Max Walk Speed=600。

5d77c228540a5f125ab8167ea71afca0.png

【4.2】填写相应事件蓝图

我们搞得就只有行走状态,只涉及人物角色动画,并不涉及到动画蓝图之类的,所以没那么麻烦。

具体步骤:


【4.2.1】创建贝塞尔曲线蓝图(BP_Bezier)

类型:Actor

作用:这里呢只用于我们进行曲线各个点的编辑,跟Blender一样。

操作:我们先给它添加一个Spline Component好了

【4.2.2】我们建立一个角色根蓝图(BP_ParentCharacter)

类型:Character

作用:用于计算角色的运动方向旋转等等

注意:

  1. 记得要转换为世界空间
  2. Distance Along Spline(这里的值不是像上面导轨说过的是0~1之间的,而是根据Bezier曲线放在场景当中的位置(一般是起点的位置)而进行偏移的

【4.2.2.1】函数:绑定轨迹点和角色的坐标

  1. 创建一个函数,填写以下蓝图
  2. 创建一个变量,类型为BP_Bezier
  3. 获取Spline Component变量
  4. 角色高度始终不变,所以设置角色高度为当前值。
  5. 设置曲线上各位置的 坐标和旋转方向 为 当前角色 的 坐标和旋转方向(曲线和角色进行绑定)

99f32ddcb9e04a9880d42b2bfd25049d.png

【4.2.2.1】初始事件:设置角色初始走动速度

  1. 事件蓝图当中设置初始事件,设置角色走动速度,200 cm/s 就可以

a9d02611ab1319e8f5bd38d4381e65ba.png

【4.2.2.2】函数:更新角色在曲线上的相对距离

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

7b834d0c424f7bc560c972a598d07877.png

【4.2.3】从ParentCharacter那里继承一个子蓝图(BP_SplineCharacter)

作用:用于判断我们的角色是不是到达了终点(可以不用继承,直接将下述蓝图放在父类ParentCharacter蓝图当中也可以的

类型:BP_ParentCharacter

操作:

  1. 每一帧调用我们父类蓝图里面的定义好的两个函数(上面两个紫色的节点)
  2. 计算我们的角色是不是到达了曲线的终点(用Spline Length曲线总长度进行对比),如果是的话,从头开始,设置Along Spline为0.

92a8419ba3e72573c323f9c7ac0194c0.png

【4.2.4】从SplineCharacter那里继承一个子角色蓝图,以设置我们的角色自定义蓝图

作用:用于自定义各类角色(小白人、小黄人、小红人等等)

【4.2.4.1】设置角色Skeletal Mesh

  1. 在上面的BP_SplineCharacter右键CreateChildBlueprint Class(或在蓝图内Class Settings进行更改父类)
  2. 在这里我们可以添加我们角色的Skeletal Mesh还有他们的角色动画(包括角色动画蓝图等等)(注意要将Skeletal Mesh的位置挪至胶囊体内(还有朝向),碰撞检测需要用到,因为Skeletal Mesh不像Static Mesh那样Auto Convex可以自动生成碰撞,所以胶囊体就是充当这样一个碰撞盒体检测的作用

【4.2.4.2】设置小白人动画蓝图当中的事件蓝图

添加小白人动画蓝图,选小白人UE4的官方骨骼

填写以下动画蓝图当中的事件蓝图(Event Graph):

目的:引用角色蓝图当中的速度变量

cceeaf3230ede8114c14a532ff0b53be.png

【4.2.4.3】添加并设置小白人的BlendSpace(停下/走动)

  1. 右键创建一个小白人的BlendSpace 1D
  2. 设置下图中中的参数(将动画序列拖拽至其上)

【4.2.4.4】设置小白人的动画蓝图当中的动画蓝图

设置动画蓝图当中的动画蓝图(Anim Graph)

目的:将角色蓝图当中的速度变量和我们混合空间BlendSpace(决定Idle还是Walk)进行相关联。

ee9d5c4e1729d35ef88a65d468f682e5.png

【4.2.4.5】选取我们刚刚设置好的角色动画蓝图

回到BP Spline Character当中把AnimClass设置为当前动画蓝图(使用动画蓝图模式)

【4.2.4.6】添加材质球并设置材质参数以获得不同颜色的官方角色

你可以设置多个不同的Spline Character,在这里呢,我暂时没有很多角色,索性就给Spline Character给上一个材质实例接口,用于产生不同皮肤颜色的官方人物

(将材质当中的三维常量颜色转为参数,以便在蓝图中更改相应的参数。)(仅为了简单测验)

2f94712eb0411fcdf2d1d8ddab180f7b.png

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

4badc8cd0928770de8b63275f5c9734a.png

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

66f5898418f131df6471b3684f15df9e.png

【4.2.5】回到BP_Bezier 当中添加相关参数

好了,我们需要再回到BP_Bezier当中,设置我们的角色,这里呢,我们添加一个SplineCharacter类数组(注意:不是Object,

  • Object是要选取场景当中的物体(直接放置生成的)——蓝色
  • Class 是直接在我们的内容浏览器当中选择相应的类(原先场景当中没有的)——紫色

1a3e5a064b2bd23b3d4a7cbefdb6e019.png

然后再添加一个角色数量 int变量——以设置该曲线上共有多少个角色在走。

【4.2.6】添加BP_Spawner以设置场景当中的特定曲线上的特定角色(间距、种类等等)

然后我们可以添加一个BP_Spawner

目的:

  1. 用于控制我们每个角色之间的距离
  2. 如果场景中有多个BP_Bezier的话,可以进行一些处理

f7bee4ebd57eaf2d2ecb994d38fec9b6.png

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

48c62a43b41dd6453e78db700b386fff.png

【4.3】向场景当中添加设置我们写好的相应蓝图

  1. 我们把BP_Bezier 蓝图放置到场景当中,添加红绿蓝等角色,设置数量为7。
  2. 然后拖拽点成相应的曲线,如上图左上角当中的曲线就可以。
  3. 曲线最后记得要【End】放在地上哦。
  4. 将BP_Spawer放置到场景当中,(当play的时候,直接开始执行蓝图事件)

大功告成:

右边的曲线,我是旋转左边的轨迹X(Roll)转了180,结果头在地上走,感觉也挺好玩的。

c1a5823024656036ec3db31979615d89.png
【UE4】Spline Meshhttps://www.zhihu.com/video/1236368293185097728

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

1d78529f664386624530a28ee243e5bd.png

五、粒子特效中 Spline的应用

待续

创作不易,麻烦如果对您有用的话,多点几个赞(尽管也赚不了一分钱),但还是能对我有些鼓励的,麻烦了。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值