[UNITY]/TIL: UNITY

[C#] Json을 use한 data save를 use한 class를 save하기

네,가능합니다 2024. 10. 2. 17:35

오늘부터 중간중간 알고있는 영어단어를 섞어 쓰도록 하겠다

왜냐면 검색을 해보면 여기저기 영어가 너무많아서 영어와 친해지는 시간이 필요할것 같아서이다.

이번에도 역시나 TeamProject 에서 필요해서 make 하게 된 code 이다.

 

우선 우리는 Player 라는 class에 Player의 모든 변수를 넣어두고 Player를 singleton pattern을 구현하여

전역적으로 management 하고 save을 하거나 load할때에도 해당 instance를 save하고 load온다.

 

그리고 Json을 이용한SaveLoadSystem에 대해선 자세하게 설명하지 않고 pass 하겠습니다.

Why ? . 다른 글에 해당 방법을 이용하는 방법에 대해 설명이 되어있음

 

우선 singleton pattern을 사용할 Player class에서 

private static Player instance;

해당 code를 작성하여 Player 타입의 instance 변수를 static으로 선언한다.

> 해당클래스 전체에서 하나의 객체만 유지한다

> 프로그램 전체에서 Player 인스턴스는 단 하나만 존재한다.

이것이 singleton pattern 이라고 한다.

 

하지만 아직 private로 선언하여 class 외부에서 접근을 하지 못하기 때문에

 

아래의 코드를 작성해줘야한다.

 

public static Player Instance
{
    get
    {
        if (instance == null)
        {
            instance = new Player;
        }
        return instance;
    }
}

 

위의 코드는 클래스 외부에서 instance에 접근할 수 있도록 하는 getter역할을 합니다.

만약 해당 instance가 null일 경우 Player객체를 생성해주고 그 이후에는 그 객체만을 사용합니다.

 

이렇게되면 어디서든  

Player playerData = Player.Instance;

이런식으로 사용할 수 있습니다.

 

이렇게된다면 save를 할때 아래와 같이 작성하면

 

public void Save()// 저장
{
    SaveLoadSystem.SaveGame(playerData);
}

 

프로그램 내에 단 하나밖에 없는 객체이기때문에 해당 내용을 바로 저장하고

 

public void Load()//불러오기
{
    Player loadedPlayer = SaveLoadSystem.LoadGame();

    if (loadedPlayer != null)
    {
        playerData = loadedPlayer;
        Player.LoadPlayer(playerData);//싱글톤화시킨 Player에 불러온값 넣어주기
        Console.WriteLine($"{playerData.Name}의 기억을 성공적으로 불러왔습니다.");
        Thread.Sleep( 2000 );
    }
    else
    {
        Console.WriteLine("저장된 기억이 없습니다. 새로운 기억을 생성합니다.");
        Thread.Sleep(1000);
        CreatePlayer(); // 닉네임 생성
    }
}

이런식으로 불러오는 코드까지 간단하게 작성한 후 (저희 프로젝트에서는 불러올 파일이 없으면 캐릭터를 생성하도록 만들어 놓았습니다.)

 

해당 save 와 load 메서드를 Loading 메서드를 만들어서 넣어주고 화면전환시마다 저장 및 불러오기를 하도록 만들었음

 

End