728x90
반응형
내가 지정한 여러 위치들 중 랜덤한 곳에서 적이 스폰되는 방법에 대해 정리해볼 것이다.
1. 스폰할 위치에 대한 클래스를 만들어준다
이 자리에서 적이 spawn 될 것이다.
2.Spawn Manager가 랜덤한 spawn위치들을 선택해서 그 자리에서 적이 뿅 나타나게 할 것이다.
1. 스폰 액터를 만들어주자. 정말 딱 적이 나타날 장소이다.
외관은 그냥 눈으로 확인할 수 있을 정도의 매쉬만 정해주었다.
spawnSpotMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("UStaticMeshComponent"));
spawnSpotMesh->SetupAttachment(RootComponent);
ConstructorHelpers::FObjectFinder<UStaticMesh> tempSpawnSpotMesh(TEXT("/Script/Engine.StaticMesh'/Game/LevelPrototyping/Meshes/SM_Cube.SM_Cube'"));
if (tempSpawnSpotMesh.Succeeded())
{
spawnSpotMesh->SetStaticMesh(tempSpawnSpotMesh.Object);
spawnSpotMesh->SetRelativeScale3D(FVector(0.8f));
spawnSpotMesh->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
2. Spawn Manager에서 스폰될 위치에 대해 정해주자
랜덤한 시간동안 랜덤한 위치에서 적이 생성되도록 할 것이고, 일정 갯수의 적이 다 나오면 Boss가 튀어나오도록 할 것이지만 일단 Boss 부분은 제외하고 적 부분만 보기로 한다. 적이 다 생성되면 boss가 spawn 되도록 하기만 하면 되니까 여러분도 할 수 있다. 혹시나 궁금하신 분이 있다면 그 때 공개하는걸루..!
void AcaEnemySpawnManager::BeginPlay()
{
Super::BeginPlay();
UGameplayStatics::GetAllActorsOfClass(GetWorld(), AcaEnemySpawnSpot::StaticClass(), spawnList);
GetWorldTimerManager().SetTimer(timerHandlespawncaEnemy, this, &AcaEnemySpawnManager::SpawnEnemy, 1, false);
ACloseAttackEnemy* enmey = Cast<ACloseAttackEnemy>(UGameplayStatics::GetActorOfClass(GetWorld(), caEnemyFactory));
}
어떤 것들을 Spawn할지 list를 만들어주고, Spawn할 Enemy Class를 캐스팅해줍니다.
void AcaEnemySpawnManager::SpawnEnemy()
{
EnemyCount++;
if (limitedEnemyCount >= EnemyCount)
{
int randIndex = 0;
randIndex = FMath::RandRange(0, spawnList.Num() - 1);
if (randIndex == prevRandIndex)
{
randIndex = (randIndex + 1) % spawnList.Num();
}
FVector loc = spawnList[randIndex]->GetActorLocation();
FRotator rot = spawnList[randIndex]->GetActorRotation();
GetWorld()->SpawnActor<ACloseAttackEnemy>(caEnemyFactory, loc, rot);
int randomTime = FMath::RandRange(minTime, maxTime);
GetWorldTimerManager().SetTimer(timerHandlespawncaEnemy, this, &AcaEnemySpawnManager::SpawnEnemy, randomTime);
prevRandIndex = randIndex;
}
//... 중략
}
RandRange를 사용해서 랜덤하게 값이 지정되도록 해주었다.
이렇게 해주고 나서 블루프린트에서 spawnList를 할당해주어야한다! build 계속해주면서 작업하다가 spawnList 생성하고난 후 list를 할당해주고 난 뒤 작업을 이어가주었다
마지막에는 Index 갱신해주는 작업까지!
728x90
반응형
'언리얼엔진 개발 > Developing' 카테고리의 다른 글
[UnrealEngine5]TPS 제작 환경에서의 LineTrace 사용하는 법 (0) | 2023.07.20 |
---|---|
[UnrealEngine5]로컬라이징( Feat. 영어, 한국어 설정하기) (0) | 2023.07.19 |
[UnrealEngine5] 플레이어가 총알을 발사하게 하는 법 (0) | 2023.07.13 |
[UnrealEngine5]버튼을 누르면 플레이어의 속도가 빨라지도록 하기 (0) | 2023.07.11 |
[UnrealEngine5]LineTrace로 충돌 감지하기 (0) | 2023.03.13 |