본문 바로가기

언리얼엔진/블루프린트슈팅게임만들기

적 Enemy 만들기

이제 적을 만들어 보겠다 블루프린트 폴더에 +Add후 블루프린트클래스/액터/ 이름 BP_Enemy로 블루프린트폴더에 저장한다. BP_Enemy열고  컴포넌트 +Add Cube를 추가해준다.

BP_Enemy 열고 My Blueprint탭에서 변수+ 클릭히 moveSpeed(Float)를 추가한뒤 컴파일후 디폴트값을 800으로 한다.

BP_Bullet에서 이벤트그래프를 카피해서 복붙해준다. 잘보면 모든 노드의 Target이 self이기때문에 가능하다.

방향은 Enemy를 생성할때 변경할것이므로 여기서는 이대로 마친다.

 

Enemy공장액터 제작하기

Enemy도 총알과 마찬가지로 레벨에서 생성한다. BP_EnemyFactory이름은 블루프린트클래스를 부모는 액터로 생성해준다. 이 블루프린트는 에너미만 생성하기 때문에 쉐이프컴포넌트는 추가하지 않습니다.

BP_EnemyFactory를 열어 이벤트그래프탭을 열어 다음과 같이 추가해주면 에너미는 실시간으로 생성되겠지만 Event Tick은 매프레인 실행되기때문에 화면은 적들로 가득차게 될것이다. 

2초마다 적을 생성하기 위해서 delayTime과 currentTime 변수를 추가해 보겠다

delayTime은 인스턴스마다 달르게 할것이므로 오른쪽 눈썹을 눌러 뜨게 해준다. 디테일 메뉴에서도 체크하면 똑같다.

컴파일후 delayTime은 디폴트값을 2로 해준다.

자 EventTick의 wire를 끊고 다음과 같이 노드를 추가한다. currentTime += DeltaSeconds 이다.

이제 currentTime이 delayTime보다 커지면 Spawn하는 로직을 연결해 보겠다.  DelayTime변수를 추가후 > (greater)노드를 추가하고 결과를 Branch노드와 연결해준다. 언리얼에서 Branch는 if문이다.

적이 생성될 지점을 만들기 위해 Components +Add에서 Arrow를 추가하고 Transform Y/Z Rotation을 -90/180로 하면 화살표가 아래로 향하게 된다.

방금만든 arrow를 끌아도 놓고 GetworldTransform에 입력후 SpawnTransform에 연결해준다.

Spawn 후에는 현재시간을 0으로 리셋해줘 다시2초를 기다리게 해준다.

전체 노드이다.

컴파일 세이브 BP_EnemyFactory를 레멜에디터뷰에 끌어다 놓고 위치를 다음과 같이 설정한다.

배치된  BP_EnemyFactory 인스턴스를 ALT+드래그로 5개정도 복사해준다.

플레이 해보면 delayTime이 똑같아 한꺼번에 적들이 나타난다. 뷰포트상의 BP_EnemyFactory의 delayTime을 조금씩 바꿔서 플레이 해보면 조금 좋와진다.

 

에너미 이동방향 랜덤하게 추첨하기

각각의 인스턴스의 delayTime을 다르게 했지만 역시 고정된 값이라 불규칙성 주려면 Event Begin Play에 다음과 같이 Random으로 DelayTime을 설정해도 되고

Spawn후 랜덤으로 delayTime을 변경하면 더욱 다양하게 된다.

현재 적은 아래로만 내려오지만 일정한 확율로 플레이어로 향하게 해보겠습니다.

이제 BP_Enemy 블루프린트를 열고 My Blueprint에서 다음과 같이 변수를 추가합니다.

direction, traceRate 변수를 추가하고 컴파일후 traceRate는 0.2로 합니다. 

이벤트그래프에 난수를 만들어주는 Random Float in Range 노드를 추가하고 범위를 0~1하고 이걸 Trace Rate와 비교해서 작으면 Player로 향하는 방향을 설정해 보겠습니다. 다음과 같이 노드를 만들면 됩니다.

Branch  True 실행핀에 GetActorOfClass 노드를 추가하고 Actor Class를 BP_Player로 해줍니다. 언리얼에서 외부의 블루프린트 클래스를 참조할때 쓰는 방법입니다.

이후 다음과 같이 노드를 만들어 줍니다. Player와 Enemy위치의 차이를 Normalize한뒤 Direction으로 설정해줍니다.

Branch 의 False의 경우 앞으로 나아가게 Forward Vector를 direction변수에 설정해 줍니다.

방향을 정했으니 그방향으로 이동하면 됩니다. Event Tick에 연결되어 있는 GetActorForwardVector를 지워주고 방금만든 direction을 get으로 추가해 줍니다.

컴파일 세이브후 플레이 해보면 가끔 플레이어를 향해 오는 적들이 있습니다.

 

'언리얼엔진 > 블루프린트슈팅게임만들기' 카테고리의 다른 글

충돌(Collision) 처리하기  (0) 2023.10.09
총알 만들기  (0) 2023.10.09
Player만들기  (0) 2023.10.08
프로젝트 만들기  (0) 2023.10.08