Menu
CoddyTech

숫자 저장하기

Coddy Unity 여정의 실제 게임 만들기 섹션에 포함된 레슨. 60개 중 22번째.

게임이 시작되면 모든 필드는 기본값으로 시작합니다. 보석 40개를 모은 플레이어가 게임을 종료하고 다음 날 다시 돌아오면 보석 개수가 0인 것을 보게 됩니다. 게임을 종료하면 게임과 그 안의 모든 것이 끝나기 때문입니다. PlayerPrefs는 게임 간에 플레이어의 기기에 작은 값을 저장합니다. 각 값은 키 아래에 저장되며, 키는 직접 정하는 문자열이고 SetInt, SetFloat 또는 SetString을 사용합니다:

PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();

값을 다시 읽으려면 같은 키를 사용해 같은 형식의 Get을 호출합니다. 저장된 적이 없는 키를 읽으면 0, 0 또는 빈 문자열이 반환되므로, 플레이어의 첫 게임에서는 이 인사말에 이름이 비어 있고 레벨이 0으로 표시됩니다:

void Start()
{
    string player = PlayerPrefs.GetString("PlayerName");
    int level = PlayerPrefs.GetInt("LevelReached");
    Debug.Log(player + " is on level " + level);
}

키는 대소문자를 구분합니다. GetInt("levelreached")는 저장된 적이 없는 키를 읽으므로 0을 반환합니다. 하나의 키에는 한 가지 형식만 저장되므로, 저장할 때 사용한 Set에 맞는 Get으로 읽으세요. 게임이 끝날 때만이 아니라 값이 바뀔 때 저장하세요. Unity는 게임이 정상적으로 종료될 때 PlayerPrefs를 디스크에 기록하고, PlayerPrefs.Save()는 즉시 기록하므로 충돌이 발생해도 값을 잃지 않습니다. static 필드도 이 문제를 해결하지 못합니다. 게임이 실행되는 동안에만 유지되며, 게임을 종료하면 그 수명도 끝나기 때문입니다.

challenge icon

챌린지

중급

점프 횟수를 게임 간에도 저장되는 누적 횟수로 만드세요.

  1. Update()에서 jumps++; 뒤에 PlayerPrefs.SetInt("TotalJumps", jumps);와 PlayerPrefs.Save();를 추가하세요.
  2. Start()에서 ShowJumps(); 위에 다음을 추가해 불러오세요: jumps = PlayerPrefs.GetInt("TotalJumps");.

‘플레이’를 누르고 점프한 다음, 중지를 누르고 다시 ‘플레이’를 누르세요. 횟수가 이어집니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;
using TMPro;

public class JumpCounter : MonoBehaviour
{
    public TMP_Text jumpsText;
    public float hop = 5f;
    private Rigidbody rb;
    private int jumps;

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

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.linearVelocity = Vector3.up * hop;
            jumps++;
            ShowJumps();
        }
    }

    void ShowJumps()
    {
        jumpsText.text = "Jumps: " + jumps;
    }
}

실제 게임 만들기의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드