응당 스토리 게임이라 하면 있어야 하는 부분에 대해 생각해보았다.
기존에는 Event Action 이나 Delegate를 활용하여 각지에 흩어진 데이터들을 하나로 모아 저장하려고 하였으나, 어제 데이터에 관한 부분들을 모두 병합하며 굳이 그럴 필요가 없어져 다른 고민을 하게 되었다.
public class Player
{
public AllChatLog AllChatLog; //대화 기록
public Dialogue_Dic DialogueDic; //대화 dic
public Dialogue_Quest_Dic DialogueQuestDic; //대화 Quest dic
public Inventory Inventory; //인벤토리
public Information Information; //캐릭터 진행 데이터
}
위의 클래스는 데이터 저장용으로 만든 클래스이다.
AllChatLog와 DialogueDic은 대화 내용도 저장하기 때문에 이 데이터를 직접 저장하게 된다면 용량이 커지고 불러올 때 어떤 일이 생길 지 예상할 수 없다.
AllChatLog는 게임을 진행하면서 출력된 대화들을 모아놓는 데이터로, 나의 선택지 내용을 Log로 포함한다.
처음에는 이 데이터를 저장해 모든 로그를 남겨두고자 했지만 위와 같은 이유로 현재 노선이 달라졌다.
AllChatLog 데이터는 휘발성으로 게임이 진행되는 동안에만 데이터를 저장하여 해당 Dialouge의 이전 기록만 확인할 수 있도록 변경한다.
다른 게임들의 스토리 회상처럼 따로 대화를 출력할 수 있는 아카이브를 설계한다. 아카이브는 DialogueManager처럼 대화 형식으로 출력하나, 장면의 전환이나 아이템 지급 등 다른 기능을 일절 배제한 별도의 기능으로 구성되어야 한다.
아카이브를 구성할 수 있는 기본 데이터는 DialogueQuestDic으로, 현재까지 완료된 대화를 확인할 수 있는 사전형 자료이며, 이 자료의 QuestType에 따라 중요도 여부도 분류할 수 있다.
위의 3가지를 주안점으로 하여 새로운 기능 추가를 목표로 하여야 한다.
현재 Player는 Save와 Load를 위해 대기하는 클래스로 존재한다.
구상하며 정리하다보니 굳이 그렇게 해야하나? 라는 생각도 들긴한다.
DataManager에 Player를 생성해두고 사용하면 하나로 저장해야 할 모든 데이터를 관리할 수 있을거라 생각된다. 물론 호출에 필요한 길이는 늘어날것이다.
해야 될 것 : 지금 구상하면서 계속 늘어나는 중인데 제한사항 없는 것 위주로