인프런 커뮤니티 질문&답변
UserDataManager 코드 질문입니다.
작성
·
9
0
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UserDataManager : SingletonBehaviour<UserDataManager>
{
public bool ExistsSavedData { get; private set; }
public List<IUserData> UserDataList { get; private set; } = new List<IUserData>();
protected override void Init()
{
base.Init();
UserDataList.Add(new UserSettingData());
UserDataList.Add(new UserGoodsData());
}
public void SetDefaultUserData()
{
for(int i = 0; i < UserDataList.Count; i++)
{
UserDataList[i].SetDefaultData();
}
}
public void LoadUserData()
{
ExistsSavedData = PlayerPrefs.GetInt("ExistsSavedData") == 1 ? true : false;
if(ExistsSavedData)
{
for (int i = 0; i < UserDataList.Count; i++)
{
UserDataList[i].LoadData();
}
}
}
public void SaveUserData()
{
bool hasSaveError = false;
for(int i =0; i < UserDataList.Count; i++)
{
bool isSaveSuccess = UserDataList[i].SaveData();
if(!isSaveSuccess)
{
hasSaveError = true;
}
}
if(!hasSaveError)
{
ExistsSavedData = true;
PlayerPrefs.SetInt("ExistsSavedData", 1);
PlayerPrefs.Save();
}
}
}위 코드의
if(!hasSaveError)
{
ExistsSavedData = true;
PlayerPrefs.SetInt("ExistsSavedData", 1);
PlayerPrefs.Save();
}이 부분에서 PlayerPrefs에 "ExistsSavedData"를 1로 저장해주는 이유가 있나요??
제 짧은 생각으로는 ExistsSavedData가 어차피 true로 처리되기 때문에 필요가 없지 않을까라는 의견입니다
이와 더불어 LoadUserData()에서도 PlayerPrefs.GetInt()를 안하고 if(ExistsSavedData) 문만 가지고는 안되는지 궁금합니다.
강의 잘 듣고 있습니다. 감사합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. Gang님.
PlayerPrefs에 “ExistsSavedData”를 1로 저장하는 이유와 관련해 궁금해 하시는 내용을 설명드리겠습니다.
PlayerPrefs의 역할
PlayerPrefs는 Unity 애플리케이션이 재시작될 때에도 지속적으로 접근 가능한 간단한 데이터 저장소로, 주로 사용자 설정이나 게임 상태를 저장하는데 사용됩니다. 따라서 코드에서 PlayerPrefs.SetInt("ExistsSavedData", 1);로 저장하는 것 또한 사용자 데이터가 존재한다는 플래그를 저장하는 용도로 사용하고 있습니다.
코드의 의도
데이터 유지:
ExistsSavedData값을PlayerPrefs에 저장해 두면, 애플리케이션이 다시 시작된 후에도 이전에 저장된 데이터가 존재하는지를 확인할 수 있습니다. 만약 메모리 내의ExistsSavedData변수만 true로 설정되어 있도록 했다면, 게임이 다시 실행될 때 해당 정보는 유실되게 됩니다.LoadUserData 메서드의 역할:
LoadUserData메서드에서는PlayerPrefs에서 “ExistsSavedData” 값을 읽어와서 데이터가 존재하는지를 확인하고 로드를 진행합니다. 그렇기 때문에 단순히 메모리 내의ExistsSavedData값으로만 검사할 수 없습니다. 애플리케이션 종료 후 재시작 시에도 데이터 존재 여부를 파악하기 위해 Persistent Storage인PlayerPrefs를 활용해야 합니다.
관련 질문과 답변을 통해 데이터를 장기적으로 저장하고 관리하는 방법에 대한 다양한 접근법을 탐색해 보시길 권장 드립니다.
- UserDataManager 코드와 JSON 사용하기: 비슷한 문제에 대한 설명과 장기적인 저장 방법을 다루고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




