유니티 2D 게임개발, 리더보드 시스템 구현 플레이어 점수를 저장하고 전 세계 사용자와 경쟁할 수 있는 리더보드 구축.

오늘은 유니티 2D 게임 개발에서 필수적인 기능 중 하나인 리더보드 시스템을 구축하는 방법에 대해 알아보겠습니다. 리더보드는 플레이어의 점수를 기록하고 이를 기반으로 사용자 간의 경쟁을 촉진하는 중요한 요소입니다. 본 글에서는 리더보드 시스템 구현에 필요한 전체 프로세스와 핵심 코드를 단계별로 설명하겠습니다.

리더보드 시스템이란?

리더보드 시스템은 게임 플레이어의 점수를 클라우드 서버에 저장하고, 이를 사용자들이 볼 수 있도록 보여주는 인터페이스입니다. 이 시스템은 게임의 경쟁성을 높이고 플레이어의 성취감을 증대시키는 역할을 합니다.

리더보드 시스템 구현의 목적

  • 플레이어의 점수를 기록하고 관리할 수 있다.
  • 전 세계의 다른 플레이어와 자신의 점수를 비교할 수 있다.
  • 플레이어의 성취감을 높이고 다시 게임에 도전하게 할 수 있다.

이 글에서 다룰 내용

  1. 리더보드 시스템 설계 개요
  2. Cloud Firestore와의 연동을 통한 데이터 저장
  3. Unity에서 리더보드 UI 구축
  4. 리더보드 점수 업데이트 및 조회 기능 구현
  5. 최종 정리 및 추가 사항

1. 리더보드 시스템 설계 개요

리더보드 시스템을 설계하기 위해서는 우선 데이터 구조를 정의해야 합니다. 일반적으로 리더보드는 플레이어 이름, 점수, 플레이 시간 등을 포함합니다. 예를 들어, 다음과 같은 형태로 데이터를 설계할 수 있습니다:


{
    "leaderboard": [
        {
            "playerName": "Player1",
            "score": 1000,
            "time": "2023-10-01T10:00:00Z"
        },
        {
            "playerName": "Player2",
            "score": 900,
            "time": "2023-10-01T09:30:00Z"
        }
    ]
}

2. Cloud Firestore와의 연동을 통한 데이터 저장

구현에 앞서 Firebase와 Firestore 서비스를 이용하여 점수를 저장하고 관리하는 방법을 살펴봅시다. Firebase는 리더보드 데이터를 안전하게 저장하고 쉽게 조회할 수 있도록 도와줍니다. 아래 단계에 따라 Firebase 프로젝트를 생성하고 Firestore를 설정해보세요.

2.1 Firebase 프로젝트 생성

  1. Firebase Console에 방문하여 새 프로젝트를 생성합니다.
  2. 프로젝트를 만든 후, Firestore 데이터베이스를 활성화합니다.
  3. Cloud Firestore를 선택하고 데이터베이스 만들기로 진행합니다.

2.2 Unity에서 Firebase SDK 설치

  1. Firebase 공식 웹사이트에서 Unity SDK를 다운로드합니다.
  2. Unity 프로젝트에 Firebase 패키지를 추가하고 필요한 모듈을 설치합니다.
  3. 리더보드 기능을 사용하기 위해 Firestore 모듈을 확인합니다.

2.3 Firestore 데이터 구조 설정

Firestore에서 사용할 데이터베이스 구조를 설정합니다. ‘leaderboard’라는 컬렉션을 만들고, 그 안에 플레이어 점수를 저장할 문서를 생성합니다.

3. Unity에서 리더보드 UI 구축

리더보드 기능을 구현하기 위해 UI를 설정합니다. Unity의 Canvas를 사용하여 사용자 인터페이스를 디자인할 수 있습니다.

3.1 UI 구성 요소 추가

  1. Canvas를 생성합니다. (GameObject > UI > Canvas)
  2. 리더보드 제목을 위한 Text UI 요소를 추가합니다.
  3. 리스트 형태로 점수를 표시하기 위한 Scroll View를 추가합니다.
  4. 각 플레이어의 점수를 표시할 Text UI 요소를 Scroll View 안에 배치합니다.

3.2 점수를 표시할 스크립트 작성


using UnityEngine;
using UnityEngine.UI;
using Firebase.Firestore;
using System.Collections.Generic;

public class LeaderboardManager : MonoBehaviour
{
    public Text leaderboardTitle;
    public Transform contentParent;
    public GameObject scoreEntryPrefab;

    private FirebaseFirestore db;

    void Start()
    {
        db = FirebaseFirestore.DefaultInstance;
        LoadLeaderboard();
    }

    void LoadLeaderboard()
    {
        db.Collection("leaderboard").OrderBy("score", descending: true).Limit(10).GetSnapshotAsync().ContinueWith(task =>
        {
            if (task.IsCompleted)
            {
                foreach (var document in task.Result.Documents)
                {
                    string playerName = document.GetValue("playerName");
                    long score = document.GetValue("score");
                    DisplayScore(playerName, score);
                }
            }
        });
    }

    void DisplayScore(string playerName, long score)
    {
        GameObject entry = Instantiate(scoreEntryPrefab, contentParent);
        entry.GetComponent().Setup(playerName, score);
    }
}

4. 리더보드 점수 업데이트 및 조회 기능 구현

이제 플레이어 점수를 업데이트하고 조회하는 기능을 구현해보겠습니다. 이를 위해 점수를 기록할 수 있는 메서드를 작성하고, 게임에서 점수를 업데이트할 때 해당 메서드를 호출합니다.

4.1 점수 업데이트 메서드 추가


public void UpdateScore(string playerName, long score)
{
    DocumentReference docRef = db.Collection("leaderboard").Document(playerName);
    docRef.SetAsync(new { playerName = playerName, score = score }, SetOptions.MergeAll);
}

4.2 게임 내 점수 업데이트 호출

게임에서 플레이어가 점수를 얻거나 게임이 끝났을 때 위 메서드를 호출하여 점수를 업데이트합니다.


void EndGame()
{
    UpdateScore(playerName, currentScore);
}

5. 최종 정리 및 추가 사항

이상으로 유니티 2D 게임에서 리더보드 시스템을 구현하는 방법에 대해 설명했습니다. 이 시스템은 플레이어 간 경쟁을 촉진하고 게임의 흥미를 더하는 매우 중요한 기능입니다.

추가적으로, 리더보드에 다양한 필터 기능(예를 들어, 주간, 월간 랭킹)을 추가하거나, 플레이어에게 보상을 주는 기능도 고려해 볼 수 있습니다. 이렇듯 리더보드 시스템을 발전시켜 나간다면, 사용자 경험을 크게 향상시킬 수 있습니다.

이 글이 유니티 게임 개발에 도움이 되었기를 바라며, 더 궁금한 점이나 추가하고 싶으신 내용이 있을 경우 댓글로 남겨주시면 감사하겠습니다!