Я пытаюсь разобраться в создании упрощенного способа создания элементов, списков и баз данных в C# И хотя все работает, мне потребовалось изгнать результаты.
Пока что У меня есть следующее
namespace Game.Database
{
public abstract class DatabaseItem : ScriptableObject
{
}
public class DatabaseList : ScriptableObject
{
public List<DatabaseItem> items;
}
public class ShipClass : ScriptableObject
{
public string shipClassID;
new public string name;
}
public class Ship : DatabaseItem
{
public string shipID;
new public string name;
public ScriptableObject shipClass;
}
}
public class Database : MonoBehaviour
{
public List<DatabaseList> lists;
void Start()
{
Ship ship = (Ship)lists[0].items[0];
Debug.Log(shipClass.shipID);
ShipClass shipClass = (ShipClass)ship.shipClass;
Debug.Log(shipClass.shipClassID);
}
}
Имейте в виду, что это проект единства, поэтому эти элементы создаются и данные назначаются через пользовательский интерфейс.
Как вы можете видеть, у меня есть резюме для мои предметы и будут иметь несколько типов предметов и несколько списков. Я пытаюсь избежать создания нескольких классов для моих списков, по одному для каждого типа элементов. Итак, я абстрагировал свои элементы от DatabaseItem
, чтобы я мог сохранить список DatabaseItem
в моем DatabaseList
. Однако это означает, что при чтении моих данных мне нужно преобразовать их обратно в класс Ship.
Хотя это не плохо для простой реализации, в производстве они будут вложенными, требуя многократных приведений, чтобы перейти к необходимые данные.
К сожалению, мне не хватает необходимого c# словаря, чтобы по-настоящему решить проблему. Глядя на определяемые пользователем операторы преобразования Microsoft и их пример, просто не имеет смысла, если это даже то, чего я хочу достичь.
РЕДАКТИРОВАТЬ - Проблема, если я не могу получить доступ к данным, поскольку я могу это сделать, это необходимость разбивать каждый уровень данных, так как в итоге это будет очень обобщенно c, используемое для всех игровых данных и очень вложенное, поэтому я пытаюсь разбить каждый уровень, чтобы иметь возможность разбить его на части. чтобы избежать.