Является ли ScriptableObject хорошим дизайном базы данных? - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь создать простую игровую базу данных, содержащую простые элементы.

Моя база данных - это просто ScriptableObject, содержащий список других ScriptableObject (Items), который содержит информацию об элементах и ​​содержит строковый ключ. .

var item = DB.GetItem("weapon.magic_sword");

1 - Есть ли лучшее решение, чем использование ключевой строки для идентификации предметов?

2 - если я хочу создать элемент. Например, добавляя случайную статистику к существующему элементу «шаблоны», я вынужден создать сценарий MonoBehaviour для Item и создать его из объекта сценария шаблона? Я использую потоковые ресурсы для сохранения инвентаря игрока, поэтому мне нужно иметь возможность использовать эти сгенерированные элементы в потоковых активах.

PS: я предпочитаю избегать реальной базы данных (такой как sql)

1 Ответ

0 голосов
/ 05 февраля 2020

Я собираюсь разобрать ваш вопрос:

  1. Не уверен, что вы подразумеваете под "базой данных" - но если вы подразумеваете это в реальном смысле, нет, ScriptableObject не может использоваться для реализации фактической базы данных
  2. ScriptableObject отлично подходит для хранения метаданных по предметам (базовая броня, урон, стоимость и т. д. c)
  3. Если вы хотите хранить динамические данные c Данные о прогрессии пользователя (локально), самое простое и надежное решение IMO - это сериализация вашего класса инвентаря и сохранение его в PlayerPrefs. Мы используем JSON. NET и храним его как строку; если вы хотите быть более оптимизированным / безопасным, вы можете использовать некоторую двоичную сериализацию (Protobuff, встроенную двоичную сериализацию и т. д. c)
  4. Я бы предложил работать с сгенерированными GUID по сравнению с работой с именованными строками, добавляет риск человеческой ошибки. Вместо этого просто добавьте автоматически сгенерированный GUID к каждому объекту и получите / установите его по уникальному идентификатору.

Надеюсь, я правильно понял ваш вопрос и ответил на него.

...