๐ก C++๋ก ์ ์ ๋ง๋ค์ด๋ณด์. ๋ํ ์ ํ์ํ๊ธฐ๊ณ๋ฅผ ํฌํจํ์ฌ ๋ง๋ค์ด ๋ณด๊ฒ ๋ค.
์ด๋ฒ์๋ Enemy Manager๊ฐ Spawn Point๋ฅผ ์ค์ค๋ก ์ฐพ์์ ํ ๋นํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ํด์ ์์ ๋ณด๊ฒ ์ต๋๋ค.
EnemyManager.h์์ FindSpawnPoints()๋ฅผ ์ ์ธํด์ฃผ์ธ์.
public:
// ์๋ต
void CreateEnemy();
// ์ถ๊ฐ
void FindSpawnPoints();
EnemyManager.cpp์์ FindSpawnPoints()๋ฅผ ์ ์ํด์ฃผ์ธ์.
#include <EngineUtils.h>
void AEnemyManager::FindSpawnPoints()
{
}
1๋ฒ์งธ ๋ฐฉ๋ฒ์ TActorIterator๋ฅผ ์ด์ฉํ๋ ๊ฒ ์ ๋๋ค.
ํน์ ์กํฐ๋ฅผ ์ฐพ๋๋ฐ์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์๋์ ๊ฐ์ด TActorIterator๋ฅผ ์ฌ์ฉํด ์๋์ ์กํฐ๋ฅผ ์ํํฉ๋๋ค.
์ํ์ค์ธ ์กํฐ์๊ฒ BP_EnemySpawnPoint๋ ์ด๋ฆ์ด ํฌํจ๋์ด ์์ผ๋ฉด spawnPoints์ ์ถ๊ฐํด์ฃผ๊ฒ ์ต๋๋ค.
๋ง์ฝ ๋ณธ์ธ์ด Spawn Point์ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ํ๋ค๋ฉด, ๊ทธ ์ด๋ฆ์ ๋ฃ์ด ์ฃผ์ด์ผ ํฉ๋๋ค.
#include <EngineUtils.h>
void AEnemyManager::FindSpawnPoints()
{
for (TActorIterator<AActor>It(GetWorld());It;++It)
{
AActor* spawn = *It;
if (spawn->GetName().Contains(TEXT("BP_EnemySpawnPoint")));
{
spawnPoints.Add(spawn);
}
}
}
BeginPlay()์์ ํธ์ถํด์ฃผ์ธ์.
void AEnemyManager::BeginPlay()
{
Super::BeginPlay();
CreateAlarm();
FindSpawnPoints();
}
์ฐ๋ฆฌ๊ฐ ํ ๋นํ๋ Spawn Point๋ค์ ์ญ์ ํด์ค๋๋ค.
โ์ปดํ์ผ ์ ์ฅโํ ์คํํด์ฃผ์ธ์.
๊ทธ๋ฆฌ๊ณ ๋ค์ Enemy Manager๋ฅผ ๋ณด๋ฉด ํ๋ ์ด ์ค ์ค์ค๋ก Spawn Point๋ค์ ์ฐพ์ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ฒ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
๊ธฐ์กด ๋ด์ฉ์ ์ฃผ์์ผ๋ก ์ฒ๋ฆฌํด์ฃผ์ธ์.
GetActorOfClass๋ฅผ ์ฌ์ฉํด์ Player๋ฅผ ์ฐพ๊ณ target์ ๋ฑ๋กํ์ ๊ฒ์ ๊ธฐ์ตํ์๋์?
์ด๋ฒ์ GetAllActorsOfClass()๋ฅผ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
๋ชจ๋ Spawn Point๋ค์ ๊ฐ์ ธ์์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋์ ๋ฐฐ์น๋ ์กํฐ๋ฅผ ๋ด์ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ GetAllActorsOfClass()๋ฅผ ํตํด ์๋์ ๋ชจ๋ ์กํฐ๋ฅผ ๊ฐ์ ธ ์ต๋๋ค.
void AEnemyManager::FindSpawnPoints()
{
TArray<AActor*> allActors;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), AActor::StaticClass(), allActors);
}
๊ทธ๋ฆฌ๊ณ ์กํฐ๋ฅผ ์ํํ๋ฉฐ ์ด๋ฆ์ "BP_EnemySpawnPoint"๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด, SpawnPoints์ ์ถ๊ฐํด์ฃผ๊ฒ ์ต๋๋ค.
์ญ์ ๋์ผํ๊ฒ Spawn Point์ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ํ๋ค๋ฉด, ๊ทธ ์ด๋ฆ์ ๋ฃ์ด ์ฃผ์ด์ผ ํฉ๋๋ค.
void AEnemyManager::FindSpawnPoints()
{
// ์๋ต
// ์ถ๊ฐ
for (auto spawn : allActors)
{
if (spawn->GetName().Contains(TEXT("BP_EnemySpawnPoint")))
{
spawnPoints.Add(spawn);
}
}
}
โ์ปดํ์ผ ์ ์ฅโํ์ฌ ๋ค์ ํ์ธํด๋ณด๋ฉด 1๋ฒ ๋ฐฉ๋ฒ๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ ๊ฒ์ ํ์ธํ์ค ์ ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง FSM์ ์ ์ฉํ ์ ์ ๊ตฌํํ๊ณ , ์๋์์ ๋์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์ ๋ณด์์ต๋๋ค.