昨天太想睡了所以沒有做完整,今天來補全昨天有缺的基本攻擊功能。
iThome30daysCharater.h
protected:
void EndAttacj();
FTimerHandle AttackTimerHandle;
iThome30daysCharacter.cpp
void AiThome30daysCharacter::DoAttack(UAnimMontage* AnimMontage)
{
if (!bIsAttacking)
{
bIsAttacking = true;
float duration = AnimMontage->GetSectionLength(0);
//這裡用 GetSectionLength 而不是 GetPlayLength 因為官方模板的 AnimMontage 是有3個區段的。
PlayAnimMontage(AnimMontage);
GetWorldTimerManager().ClearTimer(AttackTimerHandle);
GetWorldTimerManager().SetTimer(AttackTimerHandle, this, &AiThome30daysCharacter::EndAttack, duration, false);
}
}
void AiThome30daysCharacter::EndAttack()
{
bIsAttacking = false;
}
我 Code 裡說的 Section
如果到第2點就結束的話,會發現腳都不會動,這是因為 Animation Blueprint 的 Control Rig 會讓腳黏在物體表面,所以這裡需要再 ABP 做修改:
把原本的 Chracter 改成 BP_ThirdPersonChracter,然後在左下 Component > Character
把 Character type 改成 iThome30daysChracter (你的C++專案Character)
新增一個 Boolean IsAttacking,放在 Event Blueprint Update Animation 裡設為 BP_ThirdPersonChracter 的 Is Attacking
在 Anim Graph 裡把 Control Rig 的 Alpha 接上 isAttacking
明天再來做 Combo 八...