В юнити создаю свой менеджер сценариев.
spoiler[System.Serializable]
public class ScenarioManeger
{
[NonSerialized] public GameDataManager GDM;
public DialogueManager dialogueManager;
private Chapter[] chapters;
public int currentChapter = 0;
public enum ConditionType
{
StartChapter
}
private void Awake()
{
InitializeFromXML();
}
private void Start()
{
CheckScenarioActions();
}
public void InitializeFromXML()
{
ScenarioManeger loadedScenario = Utilities.LoadScenarioManager();
if (loadedScenario != null)
{
this.chapters = loadedScenario.chapters;
this.currentChapter = loadedScenario.currentChapter;
}
}
public void CheckScenarioActions()
{
chapters[currentChapter].isCurrentConditionComplete();
}
[System.Serializable]
public class Condition
{
public bool isComplited = false;
public ConditionType type;
private ConditionActions actions;
public bool isCompleteCheck()
{
switch (type)
{
case ConditionType.StartChapter:
actions.ExecuteAction(type);
return true;
default: return false;
}
}
}
[System.Serializable]
public class Chapter
{
public List<Condition> conditions;
public Chapter()
{
conditions = new List<Condition>();
}
public bool isCurrentConditionComplete()
{
if (conditions.Count == 0)
{
return true;
}
Condition currentCondition = conditions[0];
bool isCompleted = currentCondition.isCompleteCheck();
if (isCompleted)
{
conditions.RemoveAt(0);
}
return isCompleted;
}
}
}
Конкретно в этом методе пытаюсь загрузить сценарий из файла:
public void InitializeFromXML()
{
ScenarioManeger loadedScenario = Utilities.LoadScenarioManager();
if (loadedScenario != null)
{
this.chapters = loadedScenario.chapters;
this.currentChapter = loadedScenario.currentChapter;
}
}
Утилита для загрузки -
public static DialogueData LoadDialogueData()
{
string filePath = Path.Combine(Application.dataPath, "Dialogues", "Dialogues.json");
if (!File.Exists(filePath))
{
Debug.LogError("File not found: " + filePath);
return null;
}
string jsonString = File.ReadAllText(filePath);
DialogueData loadedData = JsonUtility.FromJson<DialogueData>(jsonString);
if (loadedData == null)
{
Debug.LogError("Failed to load dialogue data.");
return null;
}
return loadedData;
}
Получаю следующую ошибку -
To be XML serializable, types which inherit from IEnumerable must have an implementation of Add(System.Object) at all levels of their inheritance hierarchy
Догадываюсь что ошибка не специфична для юнити, и я упускаю что-то важное и простое. С# изучаю не долго, подозреваю что ошибка банальна. Благодарен за любые подсказки по конкретно моему случаю.
П.С. - смотрел в интернетах, но там зачастую такая ошибка при сериализации более сложных структур.