UE4筆記-003-使用C++進行AnimNotify的編寫

UE4筆記-003-使用C++進行AnimNotify的編寫


基本說明

承接之前使用C++編寫的AnimInstance,AnimationBlueprint一個很重要的功能就時響應動畫事件,比如打擊幀,傷害幀,Step音效,特效等等,用藍圖實現自不必說,簡單到不行,不過既然已經用C++實現了AnimationBlueprint,那怎麼能少得了AnimNotify呢?

要點說明

  1. AnimationBlueprint繼承自AnimInstance。
  2. AnimNotify的名稱爲AnimNotify_XXX,這點和UE4內部實現有關,其實在藍圖中也能看出來。
    藍圖中的AnimNotify
    UE4內部的AnimNotify

步驟說明

其實也就一個要點,就是實現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實現技能殘影效果)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章