본문 바로가기

언리얼엔진/C++슈팅프로젝트제작

Enemy Factory 에너미 생성 액터 제작

이제 적을 생성할 Factory가 필요합니다. C++클래스를 만들고 부모를 액터로 이름을 EnemyFactory로 합니다.

VisualStudio로 이동해서 모두 다시로드를 클릭하고 편집을 시작합니다.

EnemyFactory를 에너미만 Spawn하면 되므로 BoxCollider나 형태는 필요없습니다.

EnemyFactory.h에 적을 만들 간격에 사용할 delayTime을 만들고  currentTime은 private로 합니다.

그리고 Spawn할때 사용할 적을 담을 enemy를 TSubclassof<>로 선언합니다.

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;
	UPROPERTY(EditAnywhere)
	float delayTime = 2.0f;

	UPROPERTY(EditAnywhere)
	TSubclassOf<class AEnemyActor> enemy;

private:
	float currentTime = 0;

EnemyFactory.cpp에 delayTime이 되면 EnemyActor를 Spawn() 해줍니다.

#include "EnemyFactory.h"
#include "EnemyActor.h"

// Called every frame
void AEnemyFactory::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	if (currentTime > delayTime) {
		currentTime = 0;
		AEnemyActor* spawnActor = GetWorld()->SpawnActor<AEnemyActor>(
			enemy, GetActorLocation(), GetActorRotation());
	}
	else {
		currentTime += DeltaTime;

	}
}

 

빌드후

클래스를 이용 BP_EnemyFactory를 만들어 주고 열어서BP_EnemyActor를 TSubclassOf<class AEnemyActor> enemy;변수와 연결해 줍니다.

컴파일후 뷰포트로 드래그해서 배치한후 로테이션 Y 를 -90으로 해서 아래로 발사하게 해줍니다.

배치된 BP_EnemyFactory를 몇개더 옆으로 카피합니다.

플레이해봅니다.