언리얼4 C++ 보스 스폰
Intro
- 액터수에 따른 보스 스폰
좀비 수 감소
좀비가 죽을때 실행되는 Death
함수에 게임모드의 DercreaseMonster
함수를 추가
AFPSGameMode* gameMode = Cast<AFPSGameMode>(UGameplayStatics::GetGameMode(GetWorld()));
gameMode->DecreaseMonster();
void AFPSGameMode::DecreaseMonster()
{
RemainZombie--;
if (RemainZombie == 0)
{
Spawnning.Broadcast();
}
}
DecreaseMonster
함수는 RemainZombie
를 감소시키고 0이되면 Spawnning
델리게이트를 브로드캐스트한다.
스포너 액터 추가
보스 좀비 레퍼런스 저장
static ConstructorHelpers::FObjectFinder<UBlueprint> BossZombie(TEXT("Blueprint'/Game/Character/BP_BossZombie.BP_BossZombie'"));
if (BossZombie.Object)
{
BossActor = (UClass*)BossZombie.Object->GeneratedClass;
}
SpawnBossZombie 함수 구현
void AZombieSpawner::SpawnBossZombieDelay()
{
UE_LOG(LogTemp, Log, TEXT("Waiting Boss"));
GetWorld()->GetTimerManager().SetTimer(timer, this, &AZombieSpawner::SpawnBossZombie, 5.0f, false);
}
void AZombieSpawner::SpawnBossZombie()
{
UWorld* world = GetWorld();
if (world)
{
FActorSpawnParameters SpawnParams;
SpawnParams.Owner = this;
FRotator rotator(0, 0, 0);
FVector SpawnLocation = GetActorLocation();
world->SpawnActor<AActor>(BossActor, SpawnLocation, rotator, SpawnParams);
}
}
5초의 딜레이를 준다음 Spawnner 위치에 보스좀비를 스폰시키게한다.
델리게이트 바인딩
AFPSGameMode* gameMode = Cast<AFPSGameMode>(UGameplayStatics::GetGameMode(GetWorld()));
if (gameMode != nullptr)
{
gameMode->Spawnning.AddUObject(this, &AZombieSpawner::SpawnBossZombieDelay);
}
Spawnning 델리게이트에 바인딩해준다.
결국 남은 좀비의 숫자가 0이되면 Spawnning이 브로드캐스트되어 5초뒤에 보스좀비가 등장하게된다.
미션 텍스트 추가
미션 텍스트를 추가하고 현재 상황에 따라 애니메이션이 실행되도록 함
현재 미션을 나타내는 텍스트를 추가한다음 부모클래스를 BasicWidget
으로 교체해준다.
void UBasicWidget::NativeConstruct()
{
AFPSGameMode* gameMode = Cast<AFPSGameMode>(UGameplayStatics::GetGameMode(GetWorld()));
if (gameMode != nullptr)
{
gameMode->Spawnning.AddUObject(this, &UBasicWidget::TextChange);
}
}
BasicWidget
에 TextChange
함수를 바인딩 해준다.
TextChange 블루프린트
보스가 스폰되는 5초뒤에 애니메이션을 실행시키도록 한다.
카메라 쉐이크
보스가 스폰될때 화면이 흔들리는 연출을 구현함
카메라 쉐이크 블루프린트 추가
1초동안 카메라가 흔들리도록 구현
블루프린트 함수 추가
함수 바인딩
void AFPSPlayer::BeginPlay()
{
Super::BeginPlay();
if (gameMode != nullptr)
{
gameMode->Spawnning.AddUObject(this, &AFPSPlayer::CameraShake);
}
}
댓글남기기