세이브 로드. 직렬화 역직렬화. 해도 해도 모르겠다.


지난 게임 만들때는 Json으로 세이브 로드를 구현했는데,


구현하면서 제일 이해가 안 되었던게 역직렬화 부분이었음.



Actor{

int Age;

string Name;

}


Sword{

int Damage;

}


이런거야 세이브 로드 하기 쉽지. 안에 데이터가 전부 직렬화 되는 원시데이터니까.




근데 다음은 어떻게 함?


Actor{

int Age;

string Name;

Weapon Sword; 

}




이런 구조가 되면, Actor를 직렬화/역직렬화 하고 나면 Actor.Weapon == null 이 되버리잖아.


그럼 Actor.Init(Weapon weapon) 등을 추가로 작성해서 Weapon 만들어서 일일이 달아줘야 함?


...

var actor = new Actor (Serializer.Deserial(SaveData.Actor));

var weapon = new Weapon (Serializer.Deserial(SaveData.Weapon));

Actor.Init(weapon); <- 이 부분이 하드코딩 (저번 겜 만들때는 이렇게 했음;;)




ECS의 경우에는 저장할때 각 객체의 ID 를 int 값으로 따놓고 ID만 저장해서 세이브 로드 하는 방법을 써본적은 있음.


근데 굉장히 바보같더라. 생성된 객체들을 다 꺼내놓고 ID로 서로 이어주기 실뜨기 놀이 해줘야 하니.


그때 만든 세이브로더 : https://github.com/raveneer/EntitasSaveLoader




질문요약


객체간의 참조까지 세이브 로드할 수 있는 시리얼/디시리얼 솔루션이 존재해?






하드코딩 할 수 있지만

하고싶지 않은데숭...