유니티에서 플레이어의 주화, 아이템, HP 등, 사용자가 수정하면 안되는 것을
Json으로 저장하고 이를 읽을 수 없는 파일로 변환하면 보안을 유지할 수 있다.
반면에 PlayerPrefs는 보안이 취약해 해상도나 음소거등 설정, 즉 수정을 해도
게임에 별 상관없는 것들을 주로 한다.
1. Json
[System.Serializable]
public class Serialization<T>
{
public Serialization(List<T> _target)=> target = _target;
public List<T> target;
}
public class DataManager : MonoBehaviour
{
public TextAsset ItemDatabase;
public List<Item> AllItemList;
string filePath;
private void Start()
{
// Load();
//txt 파일을 읽어옴. 엑셀 파일로 작성되었음 text 클래스으로 한줄 한줄 잘라냄
string[] line = ItemDatabase.text.Substring(0, ItemDatabase.text.Length-1).Split('\n');
for (int i = 0; i < line.Length; i++)
{
line[i] = line[i].Trim(); //이거 추가
string[] row = line[i].Split('\t');
AllItemList.Add(new Item(row[0], row[1], row[2], row[3]));
}
filePath = Application.persistentDataPath + "/allitemdata.txt";
}
void Save()
{
string jdata = JsonUtility.ToJson(new Serialization<Item>(AllItemList));
File.WriteAllText(filePath, jdata);
}
void Load()
{
//if(!File.Exists(filePath)) {ResetItemClick(); return; }
string jdata = File.ReadAllText(filePath);
AllItemList=JsonUtility.FromJson<Serialization<Item>>(jdata).target;
}
}
위는 Json를 이용한 DB 구축에 쓰인 코드이다.
엑셀파일로 작성된것을 TXT 뽑고 유니티에 넣는다.
그리고 그것 text 클래스로 한줄 한줄 잘라내서 자료구조 리스트에 담는다.
리스트에 담은 것을 JsonUtility 유니티 제공 클래스로 Json화해서 읽고 불러오는 것이다.
2. PlayerPrefs
PlayerPrefs
안드로이드 개발할때 sharedpreference인가 키값에
저장하는 함수가 있는데 유사하다.
유니티에서 보니까 또 반갑다.
Static Functions
DeleteAll | preference에서 모든 key와 값들을 제거합니다. 사용 시 경고가 뜹니다. |
DeleteKey | 키와 대응하는 값을 삭제합니다. |
GetFloat | Preference 파일에 존재하는 /key/에 대응하는 값을 반환합니다. |
GetInt | Preference 파일에 존재하는 /key/에 대응하는 값을 반환합니다. |
GetString | Preference 파일에 존재하는 /key/에 대응하는 값을 반환합니다. |
HasKey | 키가 존재하는지 확인합니다. |
Save | 수정된 모든 preferences를 디스크에 씁니다. |
SetFloat | /key/로 식별된 Preference의 값을 설정합니다. |
SetInt | /key/로 식별된 Preference의 값을 설정합니다. |
SetString | /key/로 식별된 Preference의 값을 설정합니다. |
아래는 예시이다.
public void _save()
{
PlayerPrefs.SetString("name", name);
PlayerPrefs.SetInt ("type", type);
PlayerPrefs.SetInt ("age", age);
PlayerPrefs.SetInt ("friendship",friendship);
PlayerPrefs.SetInt ("money", money);
PlayerPrefs.Save();
}
public void _load()
{
name= PlayerPrefs.GetString("name");
type = PlayerPrefs.GetInt("type");
age = PlayerPrefs.GetInt("age");
friendship= PlayerPrefs.GetInt("friendship");
money= PlayerPrefs.GetInt("money");
tx_name.text=name;
tx_money.text=""+money;
}
메모장으로 몇번 만지면 다 수정가능하니 보안은 매우 취약하다.
'STUDY > Unity' 카테고리의 다른 글
Unity - 유니티 2인 팀 프로젝트 (폰캣) AR 앱, 블루투스 통신, 모바일 게임 (0) | 2022.01.04 |
---|---|
Unity - 정보의 은닉화 C# 프로퍼티(Property) (0) | 2021.10.28 |
Unity - AI Navigation Agent 플레이어 쫓아가기, 공포게임 (0) | 2021.10.28 |
Unity - 다른 스크립트 함수, 변수를 불러올때 (디자인 패턴 싱글톤) (0) | 2021.10.28 |
Unity - 오브젝트 텍스트 TextMeshPro, Color 변수 스크립트에서 선언하고 사용하기(Color, Color32 의 차이) (0) | 2021.10.28 |