숫자 저장하기
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 필드도 이 문제를 해결하지 못합니다. 게임이 실행되는 동안에만 유지되며, 게임을 종료하면 그 수명도 끝나기 때문입니다.
챌린지
중급점프 횟수를 게임 간에도 저장되는 누적 횟수로 만드세요.
Update()에서jumps++;뒤에PlayerPrefs.SetInt("TotalJumps", jumps);와PlayerPrefs.Save();를 추가하세요.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 플레이그라운드