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實現技能殘影效果)