기존에 사용하려던 스크립터블 오브젝트를 제거하고 Json파일을 이용하여 데이터를 저장하는 방법으로 변경했습니다.
[System.Serializable]
public class QuestDataBase
{
public int QuestIndex;
public List<QuestData> QuestDB;
}
[System.Serializable]
public class QuestData
{
public QuestType questType;
public string questObjective;
public int objectValue;
public int currentValue;
public bool isClear;
}
먼저 퀘스트 데이터를 저장할 QuestData 클래스와, 데이터를 리스트화할 QuestDataBase를 만들었습니다.
SaveData와 LoadData는 Json을 사용하는 방식대로 사용했다.
public class QuestManager
{
private string QuestjsonPath = Application.dataPath + "/Scripts/Json/QuestDBTest.json";
private string QuestjsonText;
private QuestData _cuurntQuest;
public QuestDataBase questDataBase;
public void SaveQuestDataBase()
{
string questJson = JsonUtility.ToJson(questDataBase, true);
File.WriteAllText(QuestjsonPath, questJson);
Debug.Log("퀘스트 데이터 베이스 저장 완료");
}
public void LoadQuestdataBase()
{
QuestjsonText = File.ReadAllText(QuestjsonPath);
questDataBase = JsonUtility.FromJson<QuestDataBase>(QuestjsonText);
Debug.Log("퀘스트 데이터 베이스 불러오기 완료");
_cuurntQuest = questDataBase.QuestDB[1];
}
// 퀘스트 클리어 여부 확인
public void CheckQuestCompletion()
{
// 임시. 목표 값보다 현재 달성 값이 클 때
if(questDataBase.QuestDB[questDataBase.QuestIndex].objectValue <
questDataBase.QuestDB[questDataBase.QuestIndex].currentValue)
{
questDataBase.QuestDB[questDataBase.QuestIndex].isClear = true;
}
else
{
questDataBase.QuestDB[questDataBase.QuestIndex].isClear = false;
}
}
// 다음 퀘스트로 넘어가기
public void NextQuest()
{
questDataBase.QuestIndex++;
if (questDataBase.QuestIndex >= questDataBase.QuestDB.Count)
{
questDataBase.QuestIndex = 0;
}
}
// 퀘스트 값 증가
public void QuestObjectiveValueUp()
{
_cuurntQuest.objectValue++;
}
}
그 외의 내부 함수들은 일단 임시로 작성을 했다.
내부 index가 퀘스트 리스트를 초과하면 다시 첫번째 퀘스트로 돌아오는 반복 퀘스트이다.
클리어 현황을 업데이트 하는 부분을 구현하는 법이 가장 고민스럽다.
공격력을 올리거나, 체력을 올리거나 등 다양한 부분에서 값을 증가시켜야 한다.
또한, 퀘스트에 맞는 행동을 할 때마다가 아닌 해당 퀘스트를 진행중인지도 확인을 해야한다.
이런 조건들을 이용하는 방법은 아직 잘 떠오르지 않아 더 공부해야 겠다.