1.3.1 小球动画分析,小球跳一个来回为一个循环
1.小球的垂直运动,
(1)在Z轴方向,自上而下,做加速运动。
(2)并在接触地面有短暂的停留,也就是Z的值在地面。
(2)有短暂的为0,随后自下而上做加速运动。
2.小球的缩放运动
(1)在空中时小球的XYZ缩放均为一致的。
(2)在小球落地之的极短的时间段内,XY的值急剧增大,并且让Z的值急剧变小。(也就是压扁)
(3)在小球接触地面之后,向上运动的开始时,让小球的XY的值缩小为正常,并且让Z的值回归正常
不过在回归正常的过程中,应该超出一部分的值,也就是让XY的略微缩小,再让Z的值略微增大,最后
再缓慢变回正常状态
注: 之所以会产生这样的结果,是因为小球在碰触地面(硬的物体)会因为急剧受力而导致,急剧性的
形变。而在回弹的过程中,因为自身弹性的影响,小球不应该立马回归正常缩放,而应该产生缓慢的溢出
现象,然后在缓慢回归正常。
3.小球撞击产生特效,在撞击的时候添加一个碰撞事件的**关键帧回调**即可。
1.3.2 小球动画的实现
在Event中声明一个TimeLine来执行控制。
TimeLine执行的时候通过Update,也就是在TimeLine运行的过程中更新。(TimeLine的各个参数,请查阅资料)
1.4.1 无论是蓝图也好,一般情况下,代码的执行都是有条理的,线性的。
1.4.2 Update
根据1.3,在Update执行的时,我们需要设置小球的位置信息,使用SetRelativeLocation函数,设置小球的相对位置。
根据1.3,在Update执行的时,我们需要设置小球的位置信息,使用SetRelativeLocation函数,设置小球的相对位置。
Target为 Ball,我们需要的是小球相对于自己的位移过程。
下面就是Location的设置了。
使用TimeLine就是为了根据曲线来设置小球的某些属性的大小。比如位移,形变。
根据1.3.1,添加一个Movement的Float Track,设置Length长度为3.00,我们需要一个3秒的动画
如上图就是一个先加速,触地,在向上做减速的运动。(1.46秒的时候触地,1.54秒的时候离开地面)
按住Shift可以添加关键帧。
右键可以更改关键帧差值。
根据1.3.1,添加一个Scale的Float Track,(**注:控制Scale完全是可以用一个曲线来完成的,因为小球的XY和Z,
是完全的相反的两个过程,一个水球的横向变大,那么纵向就会缩小,纵向变大,横向就会缩小)**
如上图,小球在开头和结尾,是不产生形变的。所以从0.5秒的地方开始,做加速变形。(可以先从XY来理解这个曲线)
先让小球的XY慢慢缩小(类似水滴下落,XY变小,对了,因为后面会用到Lerp函数,进行差值运算,曲线中0的含义代表的A,-0.5则代表,-0.5A)
碰撞地方是1.46S,那么在这个地方,取值为(1.46,-0.5),随后XY急剧变大,(在1.54达到顶峰1.54,2.0),随后在1.7的位置,让小球
回弹为正常状态,1.7S之后要做一个溢出的缓冲,再让缓冲在2.6S的位置回复圆形。
根据1.3.1,添加一个Event Track,也就是在某个某关键帧触发该函数的回调。
在1.46,也就是产生撞击的地方,去调用生成撞击特效的方法。
在声明完这三个序列之后,会出现如上的TimeLine,Impact会触发一个函数,Movement和Scale是值传递。
Lerp方法,之所以使用Lerp(Vector)是因为右侧Location本身也是一个向量。当然你也可以自己使用Lerp(Float)
在赋值到一个Vector的Z,传给New Location。不过没有必要。
Lerp方法,
当传入的值为0时返回A,当传入的值是1时,返回B。(假设传入0-1)其实就是A-B线性数值之间,根据传入的值取中间的百分比。负数就是
负的百分比。Movement的曲线 开始是从1-0,那么这个Lerp的Z值就会从500-0变化。小球本身的因为继承的基类,他的值初始化的时候就是(0,0,0)
这其中还牵扯一点世界坐标,和局部坐标的知识。Base的大小是Base相对于世界坐标(0,0,0)的位置,Ball的Location是相对于Base的大小
(不多赘述了)
那么因为传入的值为1,小球的Z就会先是500,也就是高空。然后逐渐下落至0,并在0的位置停留,在上升减速。
缩放也是同理,不过这里缩放的值肯定不能为0,上面展示Ball的位置时,有小球的Scale信息,小球的初始Scale是
0.5,那么这里也是0.5。小球在1.46S的缩放为-0.5,那么小球在AB片段之前会再减去一半的AB片段,也就是0.5 - 0.30.5 = 0.35。随后急剧增大到2,也就是再往后一个AB片段,也就是公式(A+V(B-A))中的,0.5+2*(0.8-0.5) = 1.1,其实就是 0.8+0.8-0.5 = 1.1,(当然这只是我方便心算所记忆的,具体返回值可以用公式计算)。
Impact关键帧的时间点,会触发这个函数,Spawn Emitter at Location。在某个位置生成发射器。
ParticleSystem本事就是粒子发射器。
发射器模板,就选一个特效。
Location要获取世界坐标,而不能是相对坐标,因为我们并不想让小球产生的特效永远生成在(0,0,0)的位置。而应该获取小球在世界坐标
中的位置。
Rotation 和 Scale可以设定特效的旋转方向 和 大小
AutoDestory在粒子生命周期执行完毕后销毁。
Pooling Method对象池方法。
Auto Activate System(自动激活粒子系统)
综上,便结束了,蓝图的开端。