=============
UE4中自定义用于sequence的变量和函数
https://zhuanlan.zhihu.com/p/136962130
ue4进化了sequence这个系统,每个版本都在进化,使得这个工具越来越好用,好用到我们甚至我们在做游戏的时候,任意的过场都可以拿他来制作,可以说是美术的利器。
绝大部分美术在短时间内就能学会ue4的sequence并用它做出绚烂的画面,但是,这只限制与一般的单机游戏的过场,如果我们希望把它做成游戏里的事件的过场,比如触发事件后的表现,就有不少欠缺了。最主要的是,因为角色在游戏中会有换装,会有不同的装备和武器,会有不是纯美术就可以控制的逻辑。
再比如说,我们拿ue做一个2d游戏,2d系统的flipbook是没有动画状态机的,那么再sequence里改变角色的方向的动画,以及改变角色的动作就不是内置的那几个trace就可以解决的了。
所以我们必须要自己定义一些函数和变量方便sequence里的动画变现,用数据和逻辑去驱动部分的动画。
向sequence里添加变量方式很多,目前就列举下我所常用的几种方式。
1.在蓝图里定义变量,并把它暴露给sequence。
选择旁边的Expose to Cinematics
2.第二个办法稍微麻烦点,在构建变量的同时等于构建了函数
先定义变量
然后定义一个Set+变量名的函数
这个时候我们打开sequence,导入定义了变量的函数,我们可以看到这两个变量都出现在sequence的trace里了
3.但是这些都是基于蓝图的,对我们程序实际控制起来有点麻烦,所以还有个方式是基于c++的,假定,我们定义了两个枚举类型,一个控制移动方向,一个控制动画动作。
我们只需要在uproperty里添加interp标识即可.
这个时候,我们可以看到sequence里多了两个自定义的枚举类型,以方便我们在不同的帧里切换不同的状态,至于切换了状态之后的处理,自然是有代码内部判断即可。
另外呢,ue4的sequence里访问自定义的函数就很简单了,两种方法.
1.在蓝图里,我们设置一个custom event。
2.或者我们在c++随便定义个函数,让它向蓝图暴露.
然后在sequence里打开这个对象,建立event的 trace,我们都可以在这个trace的任意帧绑定这个事件或者函数,方便在特定的时间里触发。
需要说明下的是,这个函数或者事件,在4.22和4.23的时候是不可以带参数的,到了4.24的时候又可以携带参数了.
下面就是我简单只利用了变量和函数,让没有状态机和动画概念的flipbook实现了事件的过场动画.
另外还有一点,如果你希望在sequence里精确的触发某一帧的状态改变,或者某个状态的精确变化,比如一个触发状态,希望它下一帧就改变回来,那么这个勾选是必须的,不然它基于时间改变的状态,可能让你会触发多次。
大致就这些。
发布于 2020-04-28