Unity/UIUX프로그래밍

0421_유니티 데이터 저장하는 것

minquu 2021. 4. 21. 12:43
반응형

 

 

 

dataPath 와 persistentDataPath 방식이있음

 

-----

 

 

 

먼저 신규 유저 데이터 저장하는 방법

 

 

 

테스트 씬을 만들어 저장 버튼과 로드 버튼을 만들어 준다.

 

 

 

 

 

SaveTest 빈 오브젝트를 만들어주고, SaveTest 스크립터를 만들어서 넣어준다..

 

 

그리고 빈 버튼을 받아서 테스트를 해준다 .

 

 로그가 잘 뜨는지

 

 

 

 

 

 

MonoBehaviour를 상속받지 않는 스크립터를 만들어준다.

 

먼저 StageInfo 는  UIStage에서 필요한 데이터를 가지고있는 Info 스크립터이다.

 

GameInfo 는 StageInfo의 배열을 만들어서 넘겨주는 역할을 한다.

 

-----

persistentDataPath 방식으로 데이터를 저장을 할 것이다.

 

 

private void Start()
    {
        var path = string.Format("{0}/geme_info.json", Application.persistentDataPath);

        if (File.Exists(path))
        { //파일이 존재한다면

        }
        else { //파일이 존재하지 않으면
            //신규유저
            this.gameInfo = new GameInfo();
            for (int i = 0; i < this.maxStage; i++) {
                var state = 2; // 기본적으로 lock 상태로 만들어준다.
                if (i == 0) {
                    state = 1;
                }
                var stageInfo = new StageInfo(i + 1, state);
                this.gameInfo.stageInfos.Add(stageInfo);
           }
            var json = JsonConvert.SerializeObject(this.gameInfo);
            File.WriteAllText(path, json);
        }

 

----

 

var path = string.Format("{0}/geme_info.json", Application.persistentDataPath);

 

먼저 path 변수에 현재  persistentDataPath 경로를 Format 으로 구워준다.

 

 

 if (File.Exists(path))
        { //파일이 존재한다면

        }

존재한다면 기존 유저이기 때문에 데이터를 불러오면 된다. // 신규 유저 이후 다룰것이다.

 

else { //파일이 존재하지 않으면
            //신규유저
            this.gameInfo = new GameInfo();

 

만약 파일이 존재하지 않는다면, gameInfo 변수에 새로운 게임 인포 객체를 만들어준다.

 

담기 위해서 라고 생각하면 쉽다.

 

 for (int i = 0; i < this.maxStage; i++) {
                var state = 2; // 기본적으로 lock 상태로 만들어준다.
                if (i == 0) {
                    state = 1;
                }
                var stageInfo = new StageInfo(i + 1, state);
                this.gameInfo.stageInfos.Add(stageInfo);
           }

최대 갯수 만큼 for를 돌려주고,

 

var state = 2 // 기본적으로 상태를 (이넘 타입) 2(lock)으로 하기 위해서 지정해준것

 

i == 0 //이면 제일 첫번째 인덱스에는 1(doing) 으로 만들어준다.

 

 

var stageInfo = new StageInfo(i + 1, state);

stageInfo 를 넣어준다. 

 

이 부분으로  데이터가 들어가서 하나의 stageInfo가 인덱스 하나로 들어간다.

 

                this.gameInfo.stageInfos.Add(stageInfo);

 

그리고 gameInfo // stageInfos(배열) 에 위에 stageInfo의 대한 정보를 넣어준다.

 

----

여기가지 데이터를 만드는 부분

 

----

 

이제부터 데이터를 직렬화하여 넣는 부분이다.

 

            var json = JsonConvert.SerializeObject(this.gameInfo);
            File.WriteAllText(path, json);

 

위에서 만든 배열 (gameInfo) 를  직렬화를 한 json 변수를 만들고

 

File.WriteAllText(path//경로 , json//파일); 를 사용하여서 저장을 해준다. 

 

======

 

기존 유저 데이터 불러오기 

 

 

 if (File.Exists(path))
        { //파일이 존재한다면
            var json = File.ReadAllText(path);
            this.gameInfo = JsonConvert.DeserializeObject<GameInfo>(json);
        }

 

만약 그 경로에 파일이 존재하면

 

            var json = File.ReadAllText(path);

var json = File.ReadAllText(path); // 경로에 있는 파일을 리드올텍스트로 모두 읽어옵니다.

 

            this.gameInfo = JsonConvert.DeserializeObject<GameInfo>(json);

 

그리고 역직렬화<GameInfo>(json); // GameInfo 형식으로 파일을 역직렬화해줍니다.

 

 

반응형