EnemyActor Class를 만들어 속성을 정의했지만 누군가 만들어 줘야 합니다.
EnemyFactory라는 Class를 만들어 관리하게 하겠습니다.
Unreal Editor에서 EnemyFactory Class를 Actor를 부모로 만듭니다.
EnemyActor를 생성할 타이머를 만들기 위해 변수2개를 헤더에 만듭니다.
UPROPERTY(EditAnywhere)
float delayTime = 2.0f;
private:
float currentTime = 0.0f;
EnemyFactory.cpp Tick()에서 타이머를 구현해줍니다.
void AEnemyFactory::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (currentTime > delayTime)
{
currentTime = 0;
}
else
{
currentTime += DeltaTime;
}
}
적을 생성하기 위해서 EnemyPawn class를 받아와야 합니다. 레벨에 존재하지 않는 오브젝트를 위한 변수타입 TSubclassOf<T> 을 사용하여 에디터에서 지정할수 있게 해줍니다. 헤더 public:에 코드를 추가합니다.
UPROPERTY(EditAnywhere)
TSubclassOf<class AEnemyActor> enemy;
enemy 오브젝트 변수를 만들었으니 이제 이 변수로 Spawn해보겠습니다. 아까 타이머가 초기화되는 뒤에 코드를 추가합니다.
AEnemyActor* enemyActor = GetWorld()->SpawnActor<AEnemyActor>
(enemy, GetActorLocation(), GetActorRotation());
BP_EnemyFactory를 만든후 연후 디테일에서 EnemyActor를 지정합니다. 그래야 변수에 연결됩니다. DelayTime도 5초로 바꿔주었습니다.
BP_EnemyFactory를 레벨에 배치한후 아래를 향하도록 y축으로 -90도 적메시의 위쪽이 카메라를 향하도록 Z축도 180도 돌려줍니다 위치는 Z를 500정도로 하면 화면 위에 위치합니다.
회진시키는게 귀찮으면 enemyFactory.c에 다음코드를 추가합니다. FRotator는 XYZ와 좀 다릅니다.ㅠㅠ대략YZX
ALT를 누르고 몇개더 복사해줍니다. Y축을 200씩 떨어트려줍니다
플레이해보면 똑같은 타이밍에 나오므로 디테일에서 delayTime을 4,5,6,7 각각 다르게 해줍니다.
플레이 해보면 다섯개의 EnemyFactory 위치에서 적들이 생성됩니다.
'언리얼게임프로젝트 > 슈팅게임 C++' 카테고리의 다른 글
충돌이벤트와 델리게이트 Delegate (0) | 2025.03.12 |
---|---|
Ureal C++ Collision처리 (0) | 2025.03.12 |
Unreal Shooting Game C++ EnemyActor (0) | 2025.03.11 |
Unreal Shooting Game bullet 총알제작 USoundBase (0) | 2025.03.11 |
Unreal C++ 플레이어 제작하기 (0) | 2025.03.11 |