개발/Unreal

[Unreal] 자습서 4장 - 블루프린트로 슈팅게임 만들기(1)

by Majangnan 2023. 3. 20.

이제 본격적으로 2D 비행기 슈팅 게임 만들기 실습을 진행해 보겠다. 2D 환경으로 제작하는 것은 아니고 카메라 배치를 단편적으로 해서 2D 게임처럼 보이게 하는 것이다. 실습에 앞서 우선 새 프로젝트를 만들어준다.

새 프로젝트 생성

언리얼 엔진을 실행하고 Games -> Blank -> With Starter Content 선택 -> Ctrl + N -> Empty level 템플릿 순으로 선택하여 프로젝트를 생성해 준다.

 

다음으로는 블루프린트 클래스를 생성하여 Game Mode Base 클래스를 상속받도록 한다. Game Mode Base 클래스는 플레이어 캐릭터의 생성 및 생성 위치, 멀티 플레이 세션 관리 및 참가 인원 관리 등등 각종 기본 클래스들을 지정해 주는 역할을 하면서 게임의 승리 조건이나 일시 정지 허용 등의 기초적인 규칙들을 설정할 때도 사용되는 중요한 클래스이다.

 

 

카메라/조명 설치

다음으로 카메라와 조명을 세팅해 준다. 좌측의 Place Actors 패널에서 camera를 검색하여 드래그하여 뷰포트에 배치시킨다.

 

 

카메라 설정은 아래와 같이 해준다. 카메라를 배치하는 것만으로는 동작하지 않기 때문에 Detauk 패널의 Auto Player Activation 탭에서 Auto Activate for Player를 Player 0으로 변경해 준다. 이렇게 하면 가장 첫 번째 플레이어가 생성되면서 동시에 카메라 액터도 활성화된다.

 

 

다음으로는 Directional Light 액터를 배치해 주고 아래와 같이 설정해 준다. 우주 배경의 게임이기 때문에 Intensity 수치를 5로 낮추었다. 

 

 

이렇게 기본적인 준비를 끝마쳤으니 다음으로는 플레이어 이동을 구현해 보겠다.

 

플레이어 이동

플레이어 역할을 할 블루프린트 클래스를 하나 생성해 준다. 부모 클래스로는 Pawn 클래스를 선택할 것이다. Pawn 클래스는 Actor 클래스를 상속받아서 액터로서의 기능에다가 사용자의 입력을 처리하는 기능까지 추가로 구현된 확장 클래스이다. 우리가 만들 플레이어는 사용자의 입력을 받아서 이동 및 슈팅 등 기능을 처리해야 하는 액터이기 때문에 Pawn 클래스로 생성한다. 이름은 'BP_Player' 라고 지어준다.

 

 

BP_Player를 더블클릭하여 들어가서 플레이어 비행기 역할을 대신할 큐브를 좌측 상단의 Add Component를 통해 우선 생성해준다. 3D 모델링은 나중에 구현하도록 하겠다.

 

 

이동을 구현하려면 사용자의 입력을 키를 통해서 받아야 하기 때문에 프로젝트 설정에서 입력값을 바인딩해주어야 한다. Setting -> Project Setting -> Engine -> Input 순으로 들어가서 Binding 탭에서 키를 추가해 주어야 한다.

 

 

아래 그림과 같이 WASD 키에 맞는 키와 값을 등록해 준다.

 

 

다시 메인 에디터로 나와서 GameModeBase 블루프린트를 더블 클릭한 뒤 우측 Details 패털에서 Default Pawn Class 항목에 BP_Player를 선택한다. 

 

 

기존의 액터와는 달리 사용자가 조작하는 플레이어의 경우에는 플레이어로 등록을 해서 내가 조작할 플레이어 액터임을 설정하는 것이다. 

 

메인 에디터에서 Player Start 액터를 좌측 Place Actor 패널에서 드래그하여 뷰포트에 배치시킨다. 

 

 

다음으로는 블루프린트를 이용해 플레이어 이동을 처리하겠다. 

 

 

실행이 되면 Event Tick 함수에 의해 GetHorizontal과 GetVertical로 계속 입력값을 받아들이고, 받아들인 값 (1, -1)과 MovSpeed(이동속도) 변수와 Delta Seconds를 곱한 값을 현재 액터의 위치 값에 더해주어 다시 위치를 Set 해준다. 

 

총알 발사하기

다음으로는 총알 발사를 구현하겠다. BP_Bullet 블루프린트 클래스를 Actor를 상속받아 생성한다. 

 

 

총알의 외형 역시 기다란 큐브를 생성하여 설정한다. BP_Bullet을 더블클릭하고 Add Component로 Cube를 추가한다. Scale 값을 아래와 같이 설정해 준다. 

 

 

총알은 플레이어 총알 발사 지점에서 생성이 되면 앞으로 나아가는 동작만 하면 되기 때문에 BP_Bullet 이벤트 그래프에서는 앞으로 나아가는 동작만 구현해 준다.

 

 

다음으로는 총알 발사 입력 키를 Action Mappings에 바인딩해준다. 키는 마우스 좌클릭으로 하겠다.

 

 

BP_Player에 다시 들어가서 총알이 발사될 지점으로 Add Componet를 통해 Arrow를 추가해 주고 이름을 'FirePosition'으로 지어준다. 큐브의 상단지점으로 Location 값을 변경하고 Y축으로 90도만큼 회전시켜 준다.

 

 

Event Graph로 들어가서 아래와 같이 코딩해 준다. Fire 이벤트를 추가하고 [SpawnActor from Class] 노드를 추가하여 Class 항목에서 BP_Bullet을 선택한다. 이렇게 되면 아까 만든 총알을 생성시킨다. 다음으로 어디서 생성될지를 지정해야 하기 때문에 아까 만들었던 FirePosition을 가져오고 FirePosition의 Transform 속성만 가져오기 위해 [GetWorldTransform] 노드를 추가하여 Spawn Transform 입력핀으로 연결시킨다.

 

 

메인 에디터 화면으로 돌아와 실행을 해보면 아래와 같이 총알이 발사되는 모습을 확인할 수 있다.

 

 

이제 마지막으로 총알 발사 사운드를 추가해 준다. 미리 준비된 음원 파일이 없다면 StarterContent 안에 있는 사운드를 활용해도 된다. BP_Player의 이벤트 그래프에서 Play Sound 노드를 추가하고 음원을 추가해준다.

 

 

댓글