В общем есть у меня редактор инвентаря,все предметы в редакторе сохраняются в AssetDatabase
Вопрос, как мне загрузить эту бд что бы можно было с ней взаимодействовать в самой игре. ниже есть код он работает в игре в редакторе Unity, но когда билдишь игру то выдает ошибку, что само собой ведь там using UnityEditor используется. Код который использует UnityEditor приходится обвертывать в #if UNITY_EDITOR. Компилится нормально без ошибок, но само собой оно не работает в сбилдженой игре. Так вот вопрос, как можно получить данные из этой AssetDatabase не используя UnityEditor на лету в самой игре.
Ниже код
Код
using System.Diagnostics;
using UnityEditor;
using UnityEngine;
namespace PlayerInventory
{
public class ISMainDataBaseControl
{
#region Singelton
private static ISMainDataBaseControl _mainDataBaseControl;
public static ISMainDataBaseControl MainDataBaseControl
{
get
{
return _mainDataBaseControl ?? (_mainDataBaseControl = new ISMainDataBaseControl());
}
}
#endregion Singelton
#region Свойства
public ISMainDataBase MainDataBase
{
get
{
if (_mainDataBaseControl._mainDataBase == null)
{
#if UNITY_EDITOR
string fullPath = @"Assets/" + DATABASE_FOLDER_NAME + "/" + MAIN_DATABASE_FILE_NAME;
_mainDataBaseControl._mainDataBase = AssetDatabase.LoadAssetAtPath(fullPath, typeof(ISMainDataBase)) as ISMainDataBase;
#endif
}
return _mainDataBase;
}
}
#endregion Свойства
#region Константы
private const string DATABASE_FOLDER_NAME = "DataBase";
private const string MAIN_DATABASE_FILE_NAME = "ISMainDataBase.asset";
#endregion Константы
#region Private переменные
private ISMainDataBase _mainDataBase;
#endregion Private переменные
/// <summary>
/// Поиск предмета по Ид в базе данных предметов инвентаря (главной бд)
/// </summary>
/// <param name="id">Ид</param>
/// <returns>Обьект с соответствующим ид</returns>
public ISItemBase FindItem(int id)
{
ISItemBase bsItem = null;
foreach (var item in MainDataBase.DataBase)
{
if (item.Id == id)
{
bsItem = item;
}
}
#if DEBUG_BUILD
if (bsItem == null)
UnityEngine.Debug.LogAssertion("[ISMainDataBaseControl] Предмета с таким Ид не обнаружено в базе данных");
#endif
return bsItem ?? new ISItemBase("Default", 0, "Default", "Def", "slot");
}
}
}
Единственное, что на ум приходит это сериализовать эту AssetDatabase в текстовый файл, но там тоже свои нюансы есть.... Как бы не вариант