UE4C++ 调用蒙太奇动画
直接调用函数PlayAnimMontage(), 通过函数定义可以知道,函数有三个参数:蒙太奇资源、播放速率和播放的蒙太奇sectionname 该函数在蓝图中的节点是Play Anim Montage 但是很多时候想在C++使用蓝图中的节点Play Montage,这个节点可以指定蒙太奇播放完后或者蒙太奇的信号通知开始和结束时的回调。C++中是用委托对该节点进行实现 通过PlayAnimMontage()函数可以知道,函数里调用了AnimInstance->Montage_Play()。蒙太奇的操作都和AnimInstance这个类有关 在AnimInstance类的头文件中声明的蒙太奇通知代理, FPlayMontageAnimNotifyDelegate是声明为两个参数的动态多播(两个参数是重点,代理绑定的函数的参数数量一定要与这个数量一直,不然编译不过)
使用的方法很简单,获取动画蓝图的实例,通过该实例中声明的代理绑定回调函数即可。
图中是绑定montage开始和结束的通知的回调,先判断该代理是否绑定函数,如果没有绑定函数调用 SlefAnimBP->OnPlayMontageNotifyBegin.AddDynamic()绑定回调 这个回调函数是两个参数,即使这两个参数用不上,也得放两个参数,就是为了保持和声明的地方一致。 在该代理的回调执行完后,最好想办法调用RemoveDynamic()函数将绑定的回调解绑,避免多次绑定导致程序问题。
绑定montage播放结束的代理: FOnMontageEnded在AnimMontage.h中也是声明为两个参数,同理绑定的回调也得是两个参数,即使我没用上它。 在声明代理后,调用BindUObject函数进行函数绑定(绑定的方式有多种,不局限于BindUObject),然后调用动画蓝图类的函数Montage_SetEndDelegate(),将绑定了函数的代理设置进去。
|