UE4笔记-003-使用C++进行AnimNotify的编写
基本说明
承接之前使用C++编写的AnimInstance,AnimationBlueprint一个很重要的功能就时响应动画事件,比如打击帧,伤害帧,Step音效,特效等等,用蓝图实现自不必说,简单到不行,不过既然已经用C++实现了AnimationBlueprint,那怎么能少得了AnimNotify呢?
要点说明
- AnimationBlueprint继承自AnimInstance。
- AnimNotify的名称为AnimNotify_XXX,这点和UE4内部实现有关,其实在蓝图中也能看出来。
步骤说明
其实也就一个要点,就是实现AnimNotify的函数一定要加上 UFUNCTION()
标志,否则的话在Animation中找不到这个AnimNotify,而且也无法实现具体的内容。
- 首先,我们在AnimaInstance中创建一个两个函数:
//MyAnimaInstance.h
UFUNCTION()
void AnimNotify_Attack(UAnimNotify * Notify);
void AnimNotify_Walk(UAnimNotify * Notify);
//MyAnimaInstance.cpp
void UMyAnimInstance::AnimNotify_Walk(UAnimNotify * Notify)
{
//UE_LOG(LogTemp, Log, TEXT("RunNotify."));
if (TPCPPDemoCharacterMain)
{
UE_LOG(LogTemp, Warning, TEXT("AnimNotify_Walk"));
}
else
{
UE_LOG(LogTemp, Warning, TEXT("MyAnimInstance.TPCPPDemoCharacterMain is null"));
}
}
void UMyAnimInstance::AnimNotify_Attack(UAnimNotify * Notify)
{
//UE_LOG(LogTemp, Log, TEXT("RunNotify."));
if (TPCPPDemoCharacterMain)
{
UE_LOG(LogTemp, Warning, TEXT("AnimNotify_Attack"));
}
else
{
UE_LOG(LogTemp, Warning, TEXT("MyAnimInstance.TPCPPDemoCharacterMain is null"));
}
}
- 编译完成之后,直接创建一个AnimationBlueprint继承自我们自己的AnimaInstance,然后去新建两个Animation Notifies:
- 这时可以发现,只有Attack会正常响应,而Walk是没有反应的,这就是因为没有加
UFUNCTION()
,只要添加上这个标志,Walk就可以正常反应了。
参考文章
ue4中动画通知的几种方式
(UE4 4.20)UE4 继承AnimNotify创建自定义动画通知事件(结合PoseableMeshComponent实现技能残影效果)