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

게임개발 중급(4) - 2D 룰렛 게임 만들기

by jyppro 2023. 4. 23.

2D 룰렛 게임 만들기

 

이번에는 저번에 이야기 했던대로 2D로 룰렛게임을 만들어 보겠습니다.

 

우선 게임이라고 하면, 사용자가 어떤 동작을 통해 오브젝트를 움직이게 할 수 있어야 합니다. 저희가 움직여야 할 오브젝트 요소는 룰렛 입니다.

 

게임의 기획을 간단하게 살펴본다면, 저희가 필요한 리소스는 룰렛이미지, 혹은 2D 오브젝트를 통해 직접 제작한 룰렛 그리고 룰렛바늘 이미지가 필요합니다. 필요한 이미지나 오브젝트를 먼저 위치에 맞게 씬에 배치하는 것이 1단계입니다.

 

2단계는, 사용자가 터치 혹은 클릭했을 때, 룰렛이 돌아가도록 해주어야 합니다. 그렇다면 컨트롤러 스크립트를 만들고, 돌아가는 주체가 룰렛이므로 룰렛 오브젝트에게 스크립트를 적용 시켜 주어야 합니다.

 

그리고 마지막으로 3단계는 룰렛이 돌기만 하면 안되고 일정시간과 속도로 돌아간 후, 천천히 느려지면서 멈춰야 합니다. 마찬가지로 컨트롤러 스크립트에서 처리할 수 있습니다.

 

그렇다면 저희가 살펴봐야 할 것은 컨트롤러 스크립트를 생각해야 합니다. 코드로 한번 살펴 보겠습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RouletteController : MonoBehaviour
{
    float rotSpeed = 0f;

    void Start()
    {
        
    }

    void Update()
    {

        if(Input.GetMouseButtonDown(0))
        {
            this.rotSpeed = 50;
        }
	transform.Rotate(0, 0, this.rotSpeed);
    }
}

 

RouletteController 라는 이름의 C#스크립트를 생성하면 RouletteController클래스가 만들어지고, 그안에 Start(), 와 Update() 가 자동으로 생성됩니다.

코드를 살펴보겠습니다.

 

1. 클래스 안에 float(실수형)으로 사용할 속도를 정의해 줍니다.

2. Update() 안에 if문을 작성해줍니다. if문은 마우스 입력을 통해서 하기위해 Input.GetMouseButtonDown을 사용합니다. 여기서 숫자 0은 왼쪽마우스 버튼(좌클릭)을 의미합니다.

3. 만약 마우스 좌클릭을 하면 50의 속도를 준다는 코드를 작성합니다.

4. 이후 if문을 빠져나오면서 transform의 Rotate(회전)을 통해 Z좌표에 속도를 줍니다.

 

해당 코드를 작성하고 룰렛에 적용시킨다음 실행하면, 룰렛은 마우스 좌클릭을 통해 50의 속도로 시계 반대방향으로 움직이게 됩니다.

 

여기서 시계 반대방향으로 움직이는 이유는 2D 환경에서 Z축은 화면 안쪽으로 향하는 것이 양수이기 때문입니다.

하지만, 이렇게만 하면 룰렛은 무한히 돌아갑니다. 저희는 룰렛을 멈추어야 하는데, 이럴 때에는 감쇠계수를 이용합니다.

코드를 보시겠습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RouletteController : MonoBehaviour
{
    float rotSpeed = 0f;

    void Start()
    {
        
    }

    void Update()
    {

        if(Input.GetMouseButtonDown(0))
        {
            this.rotSpeed = 50;
        }
	transform.Rotate(0, 0, this.rotSpeed);
	this.rotSpeed *= 0.996f;
    }
}

 

위에서 봤던 코드에서 단 한줄이 추가되었습니다. 바로 this.rotSpeed *= 0.996f; 입니다.

이 감쇠계수의 원리는 저희가 준 50의 속도를 매 프레임마다 1보다 작은 숫자를 곱해주어서 속도를 자연스럽게 늦추는 방법입니다, 0.996f 라는 숫자는 제가 임의로 설정한 숫자입니다. 코드가 Update()안에 작성되었기 때문에 매 프레임마다 코드가 실행되기 때문에 이런 작동방식을 사용할 수 있습니다.

 

한번, 직접 해보시기 바랍니다. 간단한 2D룰렛 게임 만들기는 이정도로 마무리 하겠습니다. 다음에는 만든 게임을 다양한 환경에서 빌드하는 방법에 대해 알아보겠습니다. 감사합니다.