今天來製作最後一個魔法攻擊,一個從天而降的制裁魔法(應該
ProjectileBase 裡新增一個應用設定的功能,因為我後來才發現,在外面設置的數值不會被應用到 Projectile Component 上,因為是先 Spawn 後才設定的,原本只有在 BeginPlay() 裡設置,但在 MagicWeapon 呼叫的時候 BeginPlay 都結束了。
void AProjectileBase::ApplyProjectileSettings()
{
if (!ProjectileComp) return;
ProjectileComp->InitialSpeed = InitialSpeed;
ProjectileComp->MaxSpeed = MaxSpeed;
ProjectileComp->ProjectileGravityScale = GravityScale;
ProjectileComp->bIsHomingProjectile = bIsHoming;
ProjectileComp->bRotationFollowsVelocity = bIsHoming;
ProjectileComp->UpdateComponentVelocity();
}
// MagicWeapon.h
UFUNCTION()
virtual void Shinbatsu();
// MagicWeapon.cpp
void AMagicWeapon::Shinbatsu()
{
if (!Magics[2]) return;
FVector SpawnLoc;
if (OwnerChar->TargetActor)
SpawnLoc = OwnerChar->TargetActor->GetActorLocation() + FVector(0, 0, 1000);
else
SpawnLoc = OwnerChar->GetActorLocation() + OwnerChar->GetActorForwardVector() * 1000 + FVector(0, 0, 1000);
AActor* ProjActor = GetWorld()->SpawnActor<AActor>(Magics[2], SpawnLoc, FRotator(-90,0,0));
if (AProjectileBase* Projectile = Cast<AProjectileBase>(ProjActor))
{
Projectile->Damage = Damage*3;
Projectile->bIsHoming = false;
Projectile->GravityScale = 2.0f;
Projectile->MaxSpeed = 2000;
Projectile->InitialSpeed = 1500;
Projectile->ApplyProjectileSettings();
}
}
新增投射物 Actor 並添加 BoxCollision 與 Mesh 之後,兩者的 Collision 要做修改
Box Colliision
Static Mesh
然後 Projectile Component 的 Sweep Collision 要打勾,不然物件會直接穿牆。
以及 Anim Montage 的 Notify State 也要設置要執行的 void 名稱
撞到地板後的範圍傷害就直接在 Strike Blueprint 裡做了
最後再加進 Magic Book 裡的 Magic 陣列
就