본문 바로가기
도전! N잡러!/도전! 게임 개발!

TAP FLOAT 개발 일기 #11

by NAWE 2023. 9. 26.
반응형

안녕하세요. 나위입니다.

STUDIO NAWE의 첫 타이틀. TAP FLOAT의 개발 일기를 찾아주셔서 감사합니다.

 

이전 포스팅에서 이어지는 내용이오니, 못 보신 분들은 아래 링크로 앞 내용을 먼저 보고 오시는 게 좋겠어요!

어서오세요! TAP FLOAT 개발 일기입니다!


TAP FLOAT 개발 일기 #0 바로가기 ◀

TAP FLOAT 개발 일기 #1 바로가기 ◀

TAP FLOAT 개발 일기 #2 바로가기 ◀

TAP FLOAT 개발 일기 #3 바로가기 ◀

TAP FLOAT 개발 일기 #4 바로가기 ◀

TAP FLOAT 개발 일기 #5 바로가기 ◀

TAP FLOAT 개발 일기 #6 바로가기 ◀

TAP FLOAT 개발 일기 #7 바로가기 ◀

TAP FLOAT 개발 일기 #8 바로가기 ◀

TAP FLOAT 개발 일기 #9 바로가기 ◀

TAP FLOAT 개발 일기 #10 바로가기 ◀

 

그럼, 11회 차 시작합니다!


지난 포스팅에서는 UI의 제작까지 마쳤었습니다.

거창하게 UI라고 해봤자 그냥 화면 위로 점수가 보이는 환경에 불과하긴 합니다만, 틀린말은 아니죠. 헤헤.

 

여하튼.

만들어 둔 Point Text 안에 원하는 대로 점수가 표시되게 하기 위해서는, 앞서 포스팅에서 언급했던대로 점수를 관리하기 위한 GAME MANAGER가 필요하게 됩니다.

그래서 이번 포스팅에서는 GAME MANAGER를 만들고, 점수를 표시하는 것까지 설명해 보려 해요!

 

GAME MANAGER를 만드는 법은 간단합니다.

우선, 유니티의 Hierarchy에서 마우스를 우클릭한 후, Create Empty를 선택해서 빈 게임 오브젝트를 만들어요.

그런 뒤에 그 친구의 이름을 'Game Manager'라고 정하면 끝!

빈 게임 오브젝트를 만든 뒤, 이름을 GameManager라고 붙였습니다.

 

이게 끝이면 너무 쉽겠지만... 그럴 리가 없죠.

실제 동작하는 C# 스크립트를 작성해야 해요.

그리고 이렇게 제작하는 스크립트의 이름 또한 'GamaManager'라고 붙여볼게요.

 

만들어진 GameManager의 모습입니다.

한가지 특이한 점은, 유니티에서 GameManager라는 이름의 스크립트에는 자동으로 톱니바퀴 이미지를 붙여줘요.

그만큼 유니티에서 게임을 제작할 때 GamaManager라는 이름을 많이 사용한다는 점을 알 수 있겠습니다.

 

자, Visual Studio가 켜졌으면 지체없이 코드를 작성해 볼까요?!

점수를 표현하기 위한 코드의 전문은 아래와 같습니다.

using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
    [SerializeField]
    private Text pointText;
    public float pointPerTime = 0.1f;
    public float addPoint = 0.1f;

    [HideInInspector]
    public float point = 0f;
    private float timer = 0f;

    void Update()
    {
        timer += Time.deltaTime;

        if(timer > pointPerTime)
        {
            point += addPoint;
            timer = 0f;
            UpdatePointText();
        }
    }

    void UpdatePointText()
    {
        pointText.text = point.ToString("F1") + "m";
    }
}

using에 UnityEngine.UI라는 네임스페이스가 추가되었어요.

UI 요소를 조절할 경우에는 저 네임스페이스가 자동으로 등록되고 있지만, 혹시나 붙지 않으면 직접 입력해줘야 합니다.

 

그리고, GameManager에 필요한 요소들을 미리 선언하는 내용이 앞서고 있네요.

각각 어떤 내용인지 언급하자면...

    [SerializeField]
    private Text pointText;
    public float pointPerTime = 0.1f;
    public float addPoint = 0.1f;

    [HideInInspector]
    public float point = 0f;
    private float timer = 0f;

pointText는 점수를 보여줄 텍스트 오브젝트를 등록하는 구간이에요. 상속자라고 말할 수 있을 겁니다.

UI를 제작할 때 만들어 둔 Text 오브젝트를 이 곳에 연결시켜서 제어할 예정이에요.

 

pointPerTime은 점수를 높이는 기준 시간에 대한 값이고, addPoint는 점수를 몇 점씩 높일 건지에 대한 값입니다.

지금 각각 0.1로 값이 들어가 있는데, 이 기준대로라면 '0.1초당 0.1점씩 높여줘.'가 되는 것이에요.

1초당 1점씩 높이고 싶으면 각각 1을 입력해주면 됩니다.

 

다르게는... 1초당 2점씩 높이거나, 0.1초당 1점씩 높일 수도 있는 것이죠.

비율은 저 변수의 값을 조절하기 나름인 것입니다.

뭐든 다 내 맘대로!

 

point와 timer은 일종의 초기값을 설정하기 위한 변수입니다.

게임을 시작할 때에는 둘 다 0부터 시작해야 하는 거니까요.

 

자. 이렇게 마련해 둔 변수들을 어떻게 쓸 것인지를 슬쩍 설명해보자면...

    void Update()
    {
        timer += Time.deltaTime;

        if(timer > pointPerTime)
        {
            point += addPcore;
            timer = 0f;
            UpdatePointText();
        }
    }

0부터 시작한 timer는 시간이 흘러감에 따라 자동으로 누적됩니다.

deltaTime이라는 건, 기계의 사양에 관계없이 모든 플랫폼에서 똑같은 시간으로 계산되게끔 만들어주는 코드에요.

 

그리고 if문이 이어집니다.

만일(if), 시간이 지남에 따라 자동으로 누적되는 timer의 값이 pointPerTime. 즉, '점수를 높이는 기준 시간'보다 높아지면 if문 안의 코드가 실행되는 것이에요.

 

if문 안의 내용을 해석하자면 대략 이런 내용입니다.

 

"point에 addPoint만큼 값을 더해서 누적해 주세요."

"timer 값은 0으로 초기화 해주세요."

"UpdatePointText라는 함수를 실행시켜 주세요."

 

UpdatePointText라는 함수가 무엇인지는 바로 아래에 이어집니다.

    void UpdatePointText()
    {
        pointText.text = point.ToString("F1") + "m";
    }

내용은 아주 간단합니다.

pointText는 앞서 제작했던 텍스트 오브젝트를 연결받은 상속자의 이름이죠.

그래서 해석하자면...

 

"pointText에 point를 소수점 첫째 자리까지 보여주도록 해. 뒤에 m을 붙여."

 

점수라고 표현하고 있지만, 이동한 거리를 보통 m(미터)단위로 보여주니까요.

그래서 제일 뒤에 m을 붙이도록 했습니다.

그런 뒤에 엔진으로 돌아와서 미리 만들었던 Point Text를 스크립트에 드래그 & 드롭으로 연결시켜줍니다.

Point Text에 미리 만들어 뒀던 UI 오브젝트인 Point Text를 연결시켰습니다.

 

그럼, 게임을 실행시켜 볼까요?

점수가 잘 올라가고 있어요!

생각했던 대로 점수가 잘 올라가고 있습니다!

0.1초당 0.1점씩 누적되고 있으니까요, 성공적이네요.

 

그럼, 다음 포스팅에 계속 이어서 게임 오버 화면도 만들어 보겠습니다.

 

 

<다음 편에 계속>

반응형

'도전! N잡러! > 도전! 게임 개발!' 카테고리의 다른 글

TAP FLOAT 개발 일기 #13  (100) 2023.10.05
TAP FLOAT 개발 일기 #12  (109) 2023.10.04
TAP FLOAT 개발 일기 #10  (98) 2023.09.25
TAP FLOAT 개발 일기 #9  (82) 2023.09.23
TAP FLOAT 개발 일기 #8  (68) 2023.09.22

댓글