Unity/Unity Study

[Unity] 쿠키런 모작 팀 프로젝트 중, Item 3 - PlayerPrefs를 이용한 저장기능 추가

Jee-U 2025. 2. 28. 21:03

젤리와 코인 기능은 이쪽에

 

코인, Coin

원래 코인(Coin)은 Jelly의 일종으로 AddScore(점수추가)기능만 구현하려고 하였는데, 코인을 얻어 해금하는 식으로 하자는 얘기가 나와 코인 스크립트를 따로 생성하였다.

 

코인에는 AddScore를 추가했던 것처럼 SerializeField를 이용하여 Inspector에서 각각의 프리펩(오브젝트)에 코인값을 입력할 수 있게 해주었으며 다른 아이템과 동일하게 충돌하면 사라지고, 사라지면 아이템의 효과가 적용되는 방식이다.

public class Coin : Item
{
    [SerializeField] private int coin;
    public override void ApplyEffect(Cookie cookie)
    {
        base.ApplyEffect(cookie);
        GameManager.Instance.AddCoin(coin);
    }
}

 

원래 젤리에 있던 AddScore기능은 모든 아이템(포션, 부스터 포함)을 먹었을 때에도 추가되어야한다는 의견이 있어 Jelly에서 Item으로 옮겨주었고, Jelly 스크립트는 효과음 등의 코드만 남게되었다.

public class Item : MonoBehaviour
{
    [SerializeField] private int addScore;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        Cookie cookie = collision.GetComponent<Cookie>();
        if (cookie != null)
        {
            ApplyEffect(cookie);
            Destroy(gameObject);
        }
    }

    public virtual void ApplyEffect(Cookie cookie)
    {
        GameManager.Instance.AddScore(addScore);
    }
}

 

이로써 Coin 스크립트를 넣으면 점수와 코인을 설정할 수 있게 된다.

 

AddCoin은 게임매니저에 추가해주었으며

public class GameManager : Singleton<GameManager>
{
	public int totalCoin;

	public void AddCoin(int coin)
    {
        totalCoin += coin;
        PlayerPrefs.SetInt("TotalCoin", totalCoin);
        PlayerPrefs.Save();
        Debug.Log($"코인 {totalCoin} 누적");
    }
}

저장을 해두어야 코인을 사용할 수 있을텐데 어떤방식으로 해야할까 하던 중 PlayerPrefs를 이용하여 추가하게 되었다.

 

PlayerPrefs는 예전에 유니티를 막 입문했을때 접했던 적이 있었는데

간단하게 수치, 데이터를 직접 클라이언트에 저장/관리하는 유니티에서 제공하는 데이터 관리 클래스이다.

key, Value 형식으로 데이터를 저장하며 int, float, string, bool 타입의 데이터만 가능하기 때문에 제한적이나 매우 간단하며 다른 저장방식도 있으나 유니티에 내장되어있다는 장점이 있어 이 방식으로 진행하였다.

 

디버그로그는 UI 만들기 전 임시로 테스트하고자 같이 넣어두었으며

코인을 먹으면 콘솔창에 디버그로그로 띄울 수 있게 해두었다, 결과는 성공적!

이걸 가지고 나중에 UI 담당분이 이쁘게 띄워주실 예정이다.

 

 

 

- 금일 피드백을 받았는데 PlayerPrefs보다 다른 좋은 방법들이 많으니 다른방법을 사용해보라고 하셨다.

그 방법에 대해선 공부해봐야겠다..