10
28

유니티에서 플레이어의 주화, 아이템, 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;

}

메모장으로 몇번 만지면 다 수정가능하니 보안은 매우 취약하다.

 

 

COMMENT