Суббота, 23 Ноября 2024, 17:57

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Загрузка бд из AssetDatabase без UnityEditor
berilДата: Пятница, 26 Февраля 2016, 14:18 | Сообщение # 1
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
В общем есть у меня редактор инвентаря,все предметы в редакторе сохраняются в 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 в текстовый файл, но там тоже свои нюансы есть.... Как бы не вариант




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг