TIL

2024 11 06 TIL

noc777 2024. 11. 6. 23:42

이번 프로젝트에선 플레이어의 위치와 체력,기력 등의 상태요소를 기록하여 저장할 수단이 필요하여 Json을 활용하고자 하였습니다. 하지만 프로젝트의 막바지에 하려니 저장해야하는 양이 방대한 것에 비해 설계가 힘들어 Player의 위치값과 

상태값을 저장하는 것을 구현하는 것까지만 해보고 프로젝트에 적용하는 것은 보류하게 되었습니다. 

그렇다고 해도 직렬화와 역직렬화를 직접해보면서 다음 프로젝트에서 써볼 발판을 마련하였다 생각하며 조금만 정리해봅니다. (발표준비 해야함)

[Serializable]
public class PlayerDB
{
    public string name; //데이터 파일 이름
    public List<float> Conditions; //플레이어 현 상태 값
    public float positionX; //플레이어 현위치의 x값
    public float positionY; //플레이어 현위치의 Y값
    public float positionZ; //플레이어 현위치의 Z값

    public bool isFirst = true; // 처음 데이터를 생성한 상태인지 여부를 나타내는 변수 
}

 Serializable 로 직렬화 시켜준 클래스나 구조체를 Json 데이터로 변환이 가능합니다.  

 

Json 으로 직렬화

public void SaveData()
{
	string data = JsonUtility.ToJson(container.playerDB);  //매개변수로 대상이되는 클래스
	File.WriteAllText(path+nowSlot.ToString(),data); //매개변수로 파일경로 직렬화할 string화된 클래스
}

Json 으로부터 역직렬화

public void LoadData()
{
    string data = File.ReadAllText(path+nowSlot.ToString()); //매개변수로 파일경로
    container.playerDB = JsonUtility.FromJson<PlayerDB>(data); //Json 데이터를 역직렬화 하여 다시 클래스로
}

 

오늘 받은 피드백은 DataContainer에 데이터를 저장하려고 둘거라면 굳이 Player 쪽에서 새로 클래스를 만드는 것이 아닌 

DataContainer쪽에서 주고받고를 수행하는 것이 좋을것 같다는 피드백을 받았습니다.  (사실 처음엔 그렇게 접근을 하였는데 중간에 노선을 틀어버린)   

[Serializable]
public class PlayerDB
{
    public string name; //데이터 파일 이름
    public List<float> Conditions; //플레이어 현 상태 값
    public float positionX; //플레이어 현위치의 x값
    public float positionY; //플레이어 현위치의 Y값
    public float positionZ; //플레이어 현위치의 Z값

    public bool isFirst = true;
}

[Serializable]
public class InventoryDB
{
    //인벤토리는 양이 많으므로 따로 저장
}

public class DataContainer : MonoBehaviour
{
    public PlayerDB playerDB = new PlayerDB();

또한 파일 경로를 저장할 때

"data/data.json" 처럼 폴더 경로를 설정이 가능하니 다음에 사용할 때 써보려합니다.

(Path.Combine 키워드에 대해서도 알아볼 예정) 

그리고 UI 앵커랑 피봇에 대해서도 더 공부해봐야할 것 같습니다.

'TIL' 카테고리의 다른 글

2024 11 08 TIL  (0) 2024.11.08
2024 11 07 TIL  (0) 2024.11.07
2024 11 05 TIL  (1) 2024.11.05
2024 11 04 TIL  (0) 2024.11.04
2024 11 01 TIL  (0) 2024.11.01