今天整理一下程式及新增一些小細節。
EnemyDummyCharacter.cpp
// .h
UFUNCTION(BlueprintCallable, Category = "Attack")
virtual void DoAttackAnim(USceneComponent* weapon, float curveX, float curveY, float rotatorX, float rotatorY, FVector
initLocation, FRotator initRotator, float locXscale=50, float locYscale=140, float rotXscale=-90, float rotYscale=80);
// /cpp
void AEnemyDummyCharacter::DoAttackAnim(USceneComponent* weapon, float curveX, float curveY, float rotatorX, float rotatorY, FVector
initLocation, FRotator initRotator, float locXscale, float locYscale, float rotXscale, float rotYscale)
{
float locX = curveX*locXscale + initLocation.X;
float locY = curveY*locYscale + initLocation.Y;
weapon->SetRelativeLocation(FVector(locX, locY, initLocation.Z));
float rotX = rotatorX*rotXscale;
float rotY = rotatorY*rotYscale;
weapon->SetRelativeRotation(FRotator(rotY, initRotator.Yaw, rotX));
}
加進藍圖裡:
這裡使用物理的方式模擬物理衝擊 Apply Impulse 來製作被打的樣子,通常是用在子彈後座力或被擊中的時候。
在 Components 新增 Physical Animation
定義哪些骨頭會被模擬,以及設定模擬的旋轉、速率、位置的回正力度。
被攻擊後 Apply 相機晃動、HP扣減、衝擊動畫。
使用 HitResult 的衝擊點與玩家位置相減,Normalize之後乘-1再乘上衝擊力度。
這就有了可信的受擊動畫,還不用自己K動畫