Unity/Unity Study

[Unity] 개인과제, ATM 만들기 - PlayerPrefs를 통한 유저 저장

Jee-U 2025. 3. 26. 20:56

 

이제 사용자 정보를 저장할 차례, 

사용자 정보는 제이슨(JSON) 혹은 PlayerPrefs를 통해 만들라고 되어있었는데 나는 제이슨은 자신이 없었으므로.. 바로 PlayerPrefs로 결정.

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public UserData userData;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
        }

        userData = new UserData("JeeU", 100000, 50000);
    }

    private void Start()
    {
        LoadUserData();
    }

    // 모든 동작에 메서드 넣어주면 계속 저장
    public void SaveUserData()
    {
        PlayerPrefs.SetInt("Cash", userData.Cash);
        PlayerPrefs.SetInt("Balance", userData.Balance);
        PlayerPrefs.SetString("UserName", userData.UserName);

        PlayerPrefs.Save();
    }

    // 유저 데이터를 로드하는 메소드, 불러오거나 시작하는곳에 계속 넣어주기
    public void LoadUserData()
    {
        if (PlayerPrefs.HasKey("Cash"))
        {
            userData.Cash = PlayerPrefs.GetInt("Cash");
            userData.Balance = PlayerPrefs.GetInt("Balance");
        }
    }

복잡한것도 아니고 어려운것도 아니기에 따로 스크립트를 만들 필요 없이 GameManager에 유저 저장 정보를 만들어주었다.

 

public class TextUI : MonoBehaviour
{
    UserData userData;

    public TextMeshProUGUI curBalance;
    public TextMeshProUGUI curCash;
    public TextMeshProUGUI UserNameText;

    public void Start()
    {
        // 게임매니저에서 로드데이터를 먼저 해야 불러와짐, 리프레시가 먼저면 안불러와짐
        GameManager.Instance.LoadUserData();
        Refresh();
    }

    public void Refresh()
    {
        curBalance.text = string.Format("{0:N0}", GameManager.Instance.userData.Balance);
        curCash.text = string.Format("{0:N0}", GameManager.Instance.userData.Cash);
        UserNameText.text = GameManager.Instance.userData.UserName;
    }
}

그리고 시작할때 유저 정보를 불러와서 UI에서 업데이트 할수있게 만들어주었다, 이렇게 시작할때 불러오는건 끝.

 

저장은 모든 행동과 동시에 이루어지도록 해야한다고 되어있었는데, Awake에서 처리할수도 있지만 혹시 모를 문제를 대비해 변화를 주는 모든 메서드에 저장 메서드를 추가해주었다.

public class PopupBank : MonoBehaviour
{ 
    public void DepositMoney(int amount)
    {
        if (amount > 0 && GameManager.Instance.userData.Cash >= amount)
        {
            GameManager.Instance.userData.Cash -= amount;
            GameManager.Instance.userData.Balance += amount;
        }
        else 
        {
            PopupError.SetActive(true);
        }
    textUI.Refresh();
    GameManager.Instance.SaveUserData();
}

이런식으로 추가해주면 행동과 동시에 저장이 된다. 이렇게하여 저장도 끝!

 

 

 

이었으나.. 제이슨과 PlayerPrefs 중 선택이지만 권장사항은 제이슨이었다.

이후 해야할 과제들이 제이슨으로 하는게 더 적합하다 생각하여 후에 PlayerPrefs 부분은 다 없애버리게 되었다..