액터를 부모로 BP_Enemy를 제작합니다.
Cube를 컴포넌트로 넣어주고 speed 변수를 float로 추가하고 BP_Bullet을 블루프린트를 복사해 옵니다.
Speed노드를 우클릭후 Create variable speed 해주어도 변수가 만들어 집니다. 컴파일후 디폴트값을 150으로 합니다.
Ship이 총알을 Spawn했듯이 적을 Spawn할 Manager가 필요합니다. Actor를 부모로 BP_EnemyFactory 블루프린트를 만듭니다. 화면에 표시할게 없으므로 컴포넌트를 추가할 필요는 없습니다.
변수를 만들고 컴파일후 delayTime 디폴트를 5초로 합니다.
발사할 위치를 정하기 위해 Arrow를 추가하고 아래로 향하게 회전시켜줍니다.
정해진 시간마다 적을 생성하기 위해서는 타이머가 필요합니다. Tick마다 누적되는 CurrentTime과 간격시간인 DelayTime변수를 만들어 CurrentTime이 DelayTime을 초과하면 적을 생성하고
currentTime을 초기화 하겠습니다.
BP_EnemyFactory를 레벨에 5개 배치해줍니다.
전 Z축을 1000으로 하고 좌우로 250간격으로 총 5개를 배치했습니다.
플레이 해보면 모든 적이 동시에 발생되므로 BP_EnemyFactory의 delayTime의 오른쪽 눈을 켜고
레벨의 인스턴스를 선택후 디테일에서 dealyTime을 각각 다르게 설정해줍니다. 전 3,4,5,6,7로 했습니다.
참 플레이전 카메라 화각을 바궈야 합니다.
BP_Ship을 열고 SpringArm 과 카메라를 지워줍니다.
레벨에 카메라액터를 추가하고 움직이지 않아도 되니 Static으로 설정합니다.
카메라 모드를 Orthographic으로 했습니다. 스카이가 보이지 않아 배경을 추가해야 하는것 같습니다.
플레이시 액티브되야 하므로 Auto Activete를 설정
레벨의 Floor는 지우고 플레인을 배치하고 회전시켜 배경으로 만들었습니다. 머터리얼을 만들어 적용시켰습니다.
텍스쳐는 언리얼 내부의
현제 적은 아래로만 내려옵니다 35%의 확율로 적을 추적하게 만들겠습니다.
BP_Enemy를 업니다. Direction 과 TraceRate 변수를 추가합니다.
랜덤값이 TraceRate보다 크다면 Direction에 Forward Vector를 적용하고 적다면 BP_Ship을 찾아
적이 BP_Ship으로 향하는 방향을 direction에 설정합니다.
EventTick의 Forward Vector대신 Direction으로 바꿔줍니다.
플레이 해보면
KillZone 만들기
충돌하지 않은 총알과 에너미들은 무한히 날라갑니다. 그럼 정리되지 않은 메모리들때문에 문제가 생깁니다.
이런 문제들을 해결하기 위해 KillZone을 만듭니다.
프로젝트세팅에서 콜리젼카테고리에서 NewOjectChannl을 만들고 KillZone을 추가합니다.
BP_KillZone을 열고 콜리젼 설정을 합니다. Kill Zone을 사방으로 겹쳐 놓을 예정이므로 자신도 제외합니다.
이벤트그래프를 다음과 같이 작성합니다.
BP_KillZone을 화면 위아래에 배치합니다.
플레이 해보면 확인하기 어렵지만 총알과 에너미가 킬존에 부딪쳐 사라집니다. 하지만 플레이어 자신도 사라집니다.
이유는 BP_Ship안의 Cube컴포넌트에 있습니다. Cube컴포넌트의 ObjectType이 Player가 아닌 WorldDynamic이기 때문입니다. (우리는 KillZone에서 PlayerObject만 ignore시켰기 때문입니다.) CollisionPresets을 NoCollision으로 바꿔줍니다.
BP_Bullet과 BP_Enemy의 Cube의 Collision도 NoCollision으로 변경해주는게 게임을 가볍게 합니다.
'게임프로젝트 > 슈팅게임' 카테고리의 다른 글
알파 버전 스태틱메시 교체 (0) | 2025.03.10 |
---|---|
배경 만들기 (0) | 2025.03.10 |
충돌처리 Collision (0) | 2025.03.10 |
슈팅게임 - 총알발사 (0) | 2025.03.10 |
Enhancement Input Blueprint, Pawn 이동 (1) | 2025.03.10 |