본문 바로가기
게임 프로그래밍/게임개발 중급

게임개발 중급(6) - 2D 플랫포머 게임 만들기(1)

by jyppro 2023. 4. 25.

2D 플랫포머 게임 만들기(1)

 

저번에 미리 이야기 했듯이, 오늘은 다시 2D 게임을 만드는 법에 대해 설명하겠습니다. 이번 예제에서는 유니티 내부에서 제공하는 기능을 활용하여 키보드 조작으로 캐릭터를 움직이는 플랫포머 게임을 만들어보겠습니다.

 

플랫포머(Platformer)는 주인공 캐릭터를 조작하여 스테이지를 통과하거나 목표물을 획득하는 게임의 장르 중 하나입니다. 일반적으로 2D 그래픽으로 제작되며, 플레이어가 플랫폼(바닥)을 오르내리며 장애물을 피해가는 것이 특징입니다. 플랫포머 게임은 점프, 던지기, 공격 등 다양한 액션 요소가 있으며, 보스전과 같은 스테이지의 끝에 보스가 출현하는 것도 일반적입니다. 매우 인기 있는 장르 중 하나이며, 대표적인 예시로는 슈퍼 마리오 브라더스가 있습니다.

 

먼저, 게임을 만드는 순서를 생각해보았을 때 사용할 오브젝트를 생각하고 나열하는 것이 첫째입니다. 그리고 움직이게 하는 컨트롤러 스크립트를 만들어야 합니다. 추가로, 해당 게임은 오브젝트와 부딪히는 충돌처리를 해야하는데 어떻게 하는지 차근차근 배워봅시다.

 


Step 1: 캐릭터 생성하기
- Unity Hub를 실행하여 원하는 버전의 유니티를 선택한 후, 새로운 2D 프로젝트를 생성합니다.


- Assets 폴더 내부에 Sprites 폴더를 만든 후, 캐릭터 이미지와 코인 이미지를 해당 폴더에 Import합니다.


- Hierarchy 창에서 "Create Empty"를 선택하여 게임 오브젝트를 생성합니다. 이 오브젝트는 캐릭터를 담을 컨테이너 역할을 하며, 이후 캐릭터 스프라이트를 추가할 예정입니다. 오브젝트 이름은 "Player"로 설정합니다.


- 생성한 Player 오브젝트를 선택한 후, Inspector 창에서 Add Component 버튼을 클릭하여 Rigidbody2D 컴포넌트를 추가합니다. 이는 캐릭터에 물리적인 특성을 부여하는 컴포넌트입니다.


- Inspector 창에서 Add Component 버튼을 클릭하여 Box Collider 2D 컴포넌트를 추가합니다. 이는 캐릭터와 다른 오브젝트간 충돌 감지를 위한 컴포넌트입니다.


- Sprites 폴더에서 캐릭터 이미지를 선택한 후, 해당 이미지를 Player 오브젝트에 추가합니다. 이후에는 Hierarchy 창에서 Player 오브젝트를 선택한 후, Inspector 창에서 Sprite Renderer 컴포넌트를 추가하여 캐릭터를 렌더링합니다. 이때, Sprite Renderer 컴포넌트 내부의 Sprite 속성에 캐릭터 이미지를 할당합니다.

 

위 과정을 거치면, Rigidbody와 Box Collider를 통해 충돌처리를 할 수 있는 캐릭터 오브젝트가 생성이 됩니다. 뒤에 2D 라는 이름이 붙는 이유는 2D 프로젝트에서 사용하는 컴포넌트라는 뜻입니다. 오브젝트 생성이 끝났으니 움직이기 위한 컨트롤러 스크립트를 작성해야합니다.

 


Step 2: 캐릭터 움직이기
Script 폴더를 생성한 후, Player 오브젝트에 PlayerController.cs 스크립트를 추가합니다.
아래의 코드를 스크립트 내부에 추가합니다.

 

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private float moveSpeed = 5f;
    private Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate()
    {
        float horizontal = Input.GetAxisRaw("Horizontal");
        float vertical = Input.GetAxisRaw("Vertical");

        Vector2 movement = new Vector2(horizontal, vertical);

        rb.velocity = movement * moveSpeed;
    }
}

 

코드를 간단하게 설명하자면, Horizontal과 Vertical은 방향을 나타내는 것으로 Horizontal은 왼쪽 오른쪽을 -1, 1로 나타내고, Vertical은 아래쪽 위쪽을 -1, 1로 반환합니다. 한마디로 방향에 대한 정보를 Input으로 받아와서 해당 방향으로 움직일 수 있게 만들어 주는 것입니다.

 

이렇게 되면 우리가 흔히 아는 부딪힐 수 있으며, 상하좌우로 움직일 수 있는 캐릭터가 만들어집니다.

 

한번에 전부 정리하기엔 양이 상당하여 파트를 나누어서 이야기 해볼까 합니다. 다음에도 2D 플랫포머 게임만들기를 이어서 하겠습니다. 감사합니다.