언리얼4 레벨 구성
Intro
- 레벨 구성하기
레벨
몬스터와 전투를 할 레벨은 마켓플레이스에서 무료로 다운받은 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();
}
게이트 모양의 파티클과 블로킹할 콜리전으로 구성
트리거
밟으면 게임이 시작되도록 하는 트리거 액터 생성
생성자
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();
}
캐릭터와 오버랩되면 문이 닫히는 사운드를 재생하고 StartGame
을 BroadCast
한다음 소멸한다.
StartGame
가 BroadCast
되면 게이트액터는 콜리전을 활성화시키고 파티클을 재생하게된다.
보스 스포너
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);
}
}
트리거에의해 StartGame
의 BroadCast
되면 그위치에 보스몬스터가 스폰된다.
댓글남기기