UE4笔记-003-使用C++进行AnimNotify的编写

UE4笔记-003-使用C++进行AnimNotify的编写

文章目录

  • UE4笔记-003-使用C++进行AnimNotify的编写
    • 基本说明
    • 要点说明
    • 步骤说明
    • 参考文章


基本说明

承接之前使用C++编写的AnimInstance,AnimationBlueprint一个很重要的功能就时响应动画事件,比如打击帧,伤害帧,Step音效,特效等等,用蓝图实现自不必说,简单到不行,不过既然已经用C++实现了AnimationBlueprint,那怎么能少得了AnimNotify呢?

要点说明

  1. AnimationBlueprint继承自AnimInstance。
  2. AnimNotify的名称为AnimNotify_XXX,这点和UE4内部实现有关,其实在蓝图中也能看出来。
    UE4笔记-003-使用C++进行AnimNotify的编写_第1张图片
    UE4笔记-003-使用C++进行AnimNotify的编写_第2张图片

步骤说明

其实也就一个要点,就是实现AnimNotify的函数一定要加上 UFUNCTION() 标志,否则的话在Animation中找不到这个AnimNotify,而且也无法实现具体的内容。

  1. 首先,我们在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"));
	}
}

  1. 编译完成之后,直接创建一个AnimationBlueprint继承自我们自己的AnimaInstance,然后去新建两个Animation Notifies:
    Animation Notifies
  2. 这时可以发现,只有Attack会正常响应,而Walk是没有反应的,这就是因为没有加 UFUNCTION() ,只要添加上这个标志,Walk就可以正常反应了。

参考文章

ue4中动画通知的几种方式
(UE4 4.20)UE4 继承AnimNotify创建自定义动画通知事件(结合PoseableMeshComponent实现技能残影效果)

你可能感兴趣的:(C++,UnrealEngine4)