BP의 딜레이 노드와 같은 효과를 주고싶을때
FTimerHandle delay_handle;
GetWorld()->GetTimerManager().SetTimer(delay_handle, FTimerDelegate::CreateLambda([&]()
{
// Write Game Logic . . . .
}), delay, false);
오브젝트 스폰
header
class SomePawn()
{
. . . . .
UPROPERTY(EditAnywhere)
TSubclassOf<class ASpawnObject> spawn_obj;
. . . . .
}
cpp
{
. . .
FActorSpawnParameters spawn_params;
spawn_params.Owner = GetOwner();
spawn_params.Instigator = instigator;
UWorld* world = GetWorld();
if (world)
{
world->SpawnActor<ASpawnObject>(
spawn_obj,
Spawn Location,
Spawn Rotator,
spawn_params
);
}
. . .
}
Dynamic Delegates 사용방법 (OnHit, Damage, Sensing . . . .)
void AMyPawn::BeginPlay()
{
. . .
// AddDynamic 파라미터로 사용되는 함수는 unreal document를 참고하여 작성한다.
OnTakeAnyDamage.AddDynamic(this, &AMyPawn::Damage Function);
. . .
}
AMyPawn::AMyPawn()
{
// 생성자에서도 사용 가능
sensing_component = CreateDefaultSubobject<UPawnSensingComponent>(TEXT("SensingComponent"));
sensing_component->OnSeePawn.AddDynamic(this, &AMyPawn::OnSeePawn);
}
other example . .
{
melee_hit_area->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
melee_hit_area->SetCollisionResponseToChannel(ECollisionChannel::ECC_Pawn, ECollisionResponse::ECR_Overlap);
melee_hit_area->OnComponentBeginOverlap.AddDynamic(this, &AMeleeWeaponBase::OverlapMeleeHitArea);
}
나이아가라 이펙트 스폰, 어태치
#include "NiagaraFunctionLibrary.h"
#include "NiagaraSystem.h"
. . . .
UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), spawn_effect_niagara, GetActorLocation(),
GetActorRotation());
. . . .
. . . .
UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), melee_hit_effect_niagara, spawn_loc, spawn_rot);
. . . .