언리얼4 레벨 구성

Intro

  • 레벨 구성하기

레벨

1

몬스터와 전투를 할 레벨은 마켓플레이스에서 무료로 다운받은 Soul Cave 레벨을 사용한다.

게이트

전투가 시작되면 퇴로를 차단할 게이트 액터 생성

생성자

Default = CreateDefaultSubobject<USceneComponent>(TEXT("Default"));
RootComponent = Default;

Block = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxBlock"));
Block->SetupAttachment(RootComponent);
LockParticle = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("Particle"));
LockParticle->SetupAttachment(RootComponent);

델리게이트

Super::BeginPlay();
GameMode = Cast<ARaidGameMode>(UGameplayStatics::GetGameMode(GetWorld()));
if (nullptr != GameMode)
{
	GameMode->StartGame.AddUObject(this, &ADoor::CloseDoor);
    GameMode->EndGame.AddUObject(this, &ADoor::OpenDoor);
}

Open Close 함수

void ADoor::CloseDoor()
{
	Block->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
	LockParticle->Activate(true);
}

void ADoor::OpenDoor()
{
	Block->SetCollisionEnabled(ECollisionEnabled::NoCollision);
	LockParticle->Deactivate();
}

2

게이트 모양의 파티클과 블로킹할 콜리전으로 구성

트리거

밟으면 게임이 시작되도록 하는 트리거 액터 생성

생성자

Default = CreateDefaultSubobject<USceneComponent>(TEXT("Default"));
RootComponent = Default;

BoxTrigger = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxTrigger"));
BoxTrigger->SetupAttachment(RootComponent);

static ConstructorHelpers::FObjectFinder<USoundCue>LOCK(TEXT("SoundCue'/Game/Sound/GruxSound/GateLock_Cue.GateLock_Cue'"));
if (LOCK.Succeeded())
{
    LockCue = LOCK.Object;
}

오버랩 체크

Super::BeginPlay();
BoxTrigger->OnComponentBeginOverlap.AddDynamic(this, &ADoorTrigger::AttackCheckOverlap);
GameMode = Cast<ARaidGameMode>(UGameplayStatics::GetGameMode(GetWorld()));

오버랩 함수

if (nullptr != GameMode)
	{
		UGameplayStatics::PlaySound2D(GetWorld(), LockCue);
		GameMode->StartGame.Broadcast();
		Destroy();
	}

캐릭터와 오버랩되면 문이 닫히는 사운드를 재생하고 StartGameBroadCast 한다음 소멸한다.

StartGameBroadCast되면 게이트액터는 콜리전을 활성화시키고 파티클을 재생하게된다.

보스 스포너

UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Grux)
TSubclassOf<class AGrux> GruxClass;

TSubclassOf를 사용하여 Grux의 파생클래스만 저장하도록 선언하여 안전성을 높임

void AGruxSpawner::BeginPlay()
{
	Super::BeginPlay();
	ARaidGameMode* GameMode = Cast<ARaidGameMode>(UGameplayStatics::GetGameMode(GetWorld()));
	if (GameMode != nullptr)
	{
		GameMode->StartGame.AddUObject(this, &AGruxSpawner::GruxSpawn);
	}
}

void AGruxSpawner::GruxSpawn()
{
	UWorld* world = GetWorld();
	CHECK(GruxClass);
	if (world)
	{
		FActorSpawnParameters SpawnParams;
		SpawnParams.Owner = this;
		FRotator rotator(0, 0, 0);
		FVector  SpawnLocation = GetActorLocation();

		world->SpawnActor<AActor>(GruxClass, SpawnLocation, rotator, SpawnParams);
	}
}

트리거에의해 StartGameBroadCast되면 그위치에 보스몬스터가 스폰된다.

실행결과

gif

참고 자료

댓글남기기