cool20141 cool20141

<a href= http://mosros.flybb.ru/viewtopic.php?f=2&t=635>Процесс получения диплома стоматолога: реально ли это сделать быстро?</a>

danilaxxl danilaxxl

CollectableItemData.cs

[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]

GoloGames GoloGames

vadya_ivan, рад, что вам игра показалась интересной : )

P.S. Кстати уже доступна бесплатная демо-версия в Steam

vadya_ivan vadya_ivan

Визуал, задумка, музыка , механики, все в цель

GoloGames GoloGames

Ato_Ome, спасибо за позитивные эмоции, будем стараться : )

Ato_Ome Ato_Ome

Потрясающий результат, все так четенько, плавненько)
То ли саунд, то ли плавность напомнили мне игрушку World of Goo, удачи вам в разработке и сил побольше дойти до релиза!)

Cute Fox Cute Fox

Graphics are a little cool, good HD content. But this game doesn't cause nary interest me.
However the game is well done.

GMSD3D GMSD3D

Почему действие после всех условий выполняется?
[step another object]

Zemlaynin Zemlaynin

Jusper, Везде, но наугад строить смысла нет. Нужно разведать сперва территорию на наличие ресурсов.

Jusper Jusper

Zemlaynin, а карьеры можно будет везде запихать?
Или под них "особые" зоны будут?

Zemlaynin Zemlaynin

Это так скажем тестовое строительство, а так да у города будет зона влияния которую нужно будет расширять.

Jusper Jusper

А ссылка есть?

Jusper Jusper

Я не оч понял из скриншота, как вообще работает стройка. У игрока будет как бы поле строительства?

split97 split97

в игру нужно добавить время песочные часы в инвентаре, пока бегаешь наберается усталость и ты очень тормозной мобильный враг просто убевает

split97 split97

в игру нужно добавить время песочные часы в инвентаре, пока бегаешь наберается усталость и ты очень тормозной мобильный враг просто убевает

ViktorJaguar ViktorJaguar

Почему я нигде не могу найти нормальный туториал, где покажут как экипировать предмет (например, меч) в определенную (выделенную под оружие) ячейку???

Логотип проекта Unity

Установка SQLite в Unity3D

Установка SQLite в Unity3D — Unity — DevTribe: инди-игры, разработка, сообщество

Данная статья послужит небольшой инструкцией, как интегрировать SQLite в Unity3D. Здесь вы найдете все нужные ссылки на программы и файлы, которые потребуются нам в процессе. Для начала познакомимся с этой библиотекой и разберемся зачем это нужно. Если вам и так все понятно, то смело можете переходить к процессу установки.

Что это такое?

Установка SQLite в Unity3D — Unity — DevTribe: инди-игры, разработка, сообщество

SQLite - компактная встраиваемая реляционная база данных с открытым исходным кодом. Слово "встраиваемый" означает, что SQLite не использует парадигму клиент-сервер, то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а предоставляет библиотеку, с которой программа компонуется и движок становится составной частью программы. Таким образом, в качестве протокола обмена используются вызовы функций (API) библиотеки SQLite. Такой подход уменьшает накладные расходы, время отклика и упрощает программу. SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в единственном стандартном файле на том компьютере, на котором исполняется программа.

А зачем нам это нужно?

Очевидно, что для систематизации и хранения данных. Как альтернатива можно хранить данные и в XML, но при разрастании этого файла скорость поиска нужной информации существенно снижается, ну и как самый крайний вариант - в коде (но это уже совсем крайность). Ладно рассмотрим конкретный пример. Допустим в БД мы будем хранить информацию о всевозможном оружии в игре с такими вот параметрами

  • Id - просто уникальный индекс
  • Name - имя
  • Cost - стоимость
  • Damage - урон
  • Type - тип оружия

Ну в принципе ничего сложного. А вот теперь представьте, что вы захотели, чтобы ваше оружие генерировалось случайным образом. Или вы захотели добавить различные бонусы. Или повысить урон у одноручного оружия со стоимостью ниже средней стоимости всего оружия? Представляете как вы это все будете проделывать используя XML файл для хранения данных? Если да, то молодцы! А теперь взгляните ка на эти решения:

sql
-- Генерация
INSERT INTO weapons (Name, Cost, Damage, Type) VALUES (
    'Rnd_' || Random(),
    Random(10, 100),
    'OneHand'
  );
-- Повышение урона
SELECT Avg(Cost) INTO avg_cost FROM weapons WHERE Type='OneHand' GROUP BY Type;
UPDATE weapons SET Damage = Damage * 1.10 WHERE Cost < avg_cost;

Как видите ничего сложного, все делает очень легко и просто.
Так же хочу отметить, что хранение бинарных файлов (Картинка, Звуки, Музыка и т.д.) в БД является грубым тоном и нежелательно. Лучше хранить эти файлы в папке, а в базе прописывать лишь пути к этим файлам.
Надеюсь я вас убедил, что SQLite - это хорошее решение для хранения данных игры.
А теперь пожалуй перейдем непосредственно к установке SQLite в Unity3D

Установка SQLite

Для начала надо скачать себе программу для работы с SQLite базой. Там вы будете создавать свою базу данных, заполнять первоначальными данными, а так же можно побаловаться с написанием SQL запросов.
Вот несколько вариантов:

  • SQLIte Manager - плагин для FireFox, в целом выглядит забавно, в некоторых местах не всегда удобно, но работать можно.
  • dotConnect for SQLite - плагин для Visual Studio. В целом вещь занятная, но не особо удобная в плане создания таблиц, либо я что то делаю не так.
  • SqliteDog - платная, но есть и бесплатная версия. Не пробовал

Создайте себе тестовую базу данных и сохраните её в папку с проектом. У меня получился такой путь для базы данных "Unity_Project/Assets/db/example.sqlite" и такая вот миленькая табличка
http://screenshot.su/show.php?img=7ae8f10854fbc9ec1843e0aa912...
Теперь надо установить необходимые библиотеки для работы с SQLite. самое интересное, это то что в Unity уже есть поддержка данного функционала, но по каким то причинам использовать их просто так нельзя. Для этого надо надо создать папку "Assets/Plugins" внутри вашего проекта. Затем отправиться по этому пути "Путь до Unity/Editor/Data/Mono/lib/mono/2.0" и скопировать следующие файлы

  • System.Data.dll
  • Mono.Data.SQlite.dll
  • System.Security.dll
  • System.Configuration.dll
  • System.EnterpriseServices.dll

А так же, файл sqlite3.dll из папки "Путь до Unity/Editor". После всех этих манипуляций надо запустить проект, и если у вас обычная версия юнити, то он будет ругаться на библиотеку Mono.Data.Sqlite. Решается это просто, создаем еще одну папку рядом с папкой "Plugins" с названием "Managed", и перемещаем все эти файлы в новую папку. В итоге у вас должно получиться примерно так:
http://screenshot.su/show.php?img=97ff94aa22b5e9d634740c0bdbe...

Теперь можно приступать к работе с SQLite базой из кода. Создадим новый скрипт и повесим его на камеру.

using UnityEngine;
using System.Collections;
// Подключаем необходимые пространства имен
using System.Data;
using Mono.Data.Sqlite;

public class Test : MonoBehaviour {
	void Start () {
        // Подключаемся к нашей базе данных
        string connectionString = "URI=file:" + Application.dataPath + "/db/example.sqlite";
        using (IDbConnection dbcon = (IDbConnection)new SqliteConnection(connectionString))
        {
            dbcon.Open();

            // Выбираем нужные нам данные
            var sql = "SELECT Name, Cost, Damage, Type FROM weapons";
            using (IDbCommand dbcmd = dbcon.CreateCommand())
            {
                dbcmd.CommandText = sql;
                // Выполняем запрос
                using (IDataReader reader = dbcmd.ExecuteReader())
                {
                    // Читаем и выводим результат
                    while (reader.Read())
                    {
                        const string frmt = "Name: {0}; Cost: {1}; Damage: {2}; Type: {3};";
                        Debug.Log(string.Format(frmt,
                            reader.GetString(0),
                            reader.GetInt32(1),
                            reader.GetInt32(2),
                            reader.GetString(3)
                          ));
                    }
                }
            }
            // Закрываем соединение
            dbcon.Close();
        }
	}
}

Теперь можно запускать проект и смотреть консоль отладки. А видим мы именно то, что мы и хотели увидеть
http://screenshot.su/show.php?img=71572800258807c3b0ce84dfb72...
В общем то на этом можно и заканчивать, но работать таким способом c базой не очень удобно. Поэтому я предлагаю использовать такое вот решение sqlite-net (Спасибо SuperBilge за рабочую версию). Это набор Generic классов, которые очень сильно облегчают работу с вашей базой данных. Устанавливается она легко, просто скопируйте файлы из папки "/src" к себе в проект. Я скопировал только SQLite.cs, ибо остальные мне не потребовались. Теперь наш скрипт имеет немного другое содержание

using UnityEngine;
using System.Collections;

using System.Collections.Generic;
using SQLite;

// Определяем структуру для таблицы Weapons
public class Weapon
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Name { get; set; }
    public int Cost { get; set; }
    public int Damage { get; set; }
    public string Type { get; set; }
}

public class Test : MonoBehaviour {
	void Start () {
        // Создаем новое подключение к базе данных
        using (var db = new SQLiteConnection(Application.dataPath + "/db/example.sqlite"))
        {
            // Делаем запрос на выборку данных
            IEnumerable<Weapon> list = db.Query<Weapon>("SELECT * FROM weapons");
            // Читаем и выводим результат
            foreach (Weapon weapon in list)
            {
                const string frmt = "Name: {0}; Cost: {1}; Damage: {2}; Type: {3};";
                Debug.Log(string.Format(frmt,
                    weapon.Name,
                    weapon.Cost,
                    weapon.Damage,
                    weapon.Type
                   ));
            }
            // И не забываем закрыть соединение
            db.Close();
        }
	}
}

Как видите эти классы позволяют очень легко манипулировать данными. Можно запустить этот скрипт и убедиться, что результат работы будет идентичным.

Небольшое добавление

Есть весьма забавная особенность этой библиотеки. Почему то после запуска выдается ошибка, что нельзя использовать плагины в не PRO версии. Но при этом все равно работать отлично. Но при переносе их в папку Managed все работает отлично и ошибку не выдает. Хотя такой проблемы нет для других библиотек, которые я использовал.

Заключение

Как видите ничего сложного в использовании SQLite в Unity3D нету. Как его использовать решать уже вам.

Ссылки по теме:


Смотрите также:


Комментарии



  • 1 (Текущая страница)
  • 2

Спасибо, было полезно! :)

какие-нибудь ORM или ActiveRecord для этих вещей есть?

Я правильно понял, что это не узко специализированная структура, например, только для хранения параметров мечей, а структура, где можно хранить определяемые тобой данные(т.е. если я хочу определить и хранить там параметры брони, например)?

GenElCon, это в:СУРБД, в них можно хранить всю игру, только вот на мультиплеерном клиенте хватит и массива Dictionary, а на сервере скулайт слишком тормознутая и там стоило брать чтото вроде nosql
для сингла в самый раз, да. можно ещё сейвы все в этом хранить =)

Предпочитаю джаву, H2-базы и Hibernate.

На практике, кстати, пришел к выводу что собственный бинарный формат данных в подавляющем большинстве юзкейсов оказывается удобнее базы, если только это не серверное приложение или что-то сравнимое с ним по объему данных и способу их использования.

upd: но за статью плюс, конечно - кому-то да пригодится. Уточнить бы еще заведется ли это на андроиде в данной конфигурации и если не заведется, то что изменить надо чтобы завелось - sqlite то туда есть, но с нюансами.

prog, на счет андроида не знаю, но на ios точно должно завестись. Свой бинарный формат может быть и хорош, но должно же быть еще и удобно использовать все это дело. SQLite сочетает в себе и скорость работы и удобство. Например в iOS приложениях используется именно эта штуковина для хранения данных.
ScorpioT1000:

на сервере скулайт слишком тормознутая и там стоило брать чтото вроде nosql

для сервера хороша связка sql с кэшированием используемых данных.
GenElCon, абсолютно точно.

prog:

я велосипедист

есть классные штуки вроде g:protobuf

alexprey, на андроидах тоже скулайт) для локального хранилища, контактов, календаря, смс итп.. оно везде
основное преимущество скулайт - что оно может работать на уровне апи, а не сетевом

alexprey, должно завестись и заведется это разные вещи - говорю же, черт кроется в деталях. В частности, речь о способе подключения функционала - dll бинарники не то чтобы хорошо работали на других системах. Про использование SQLite на мобильных устройствах я в курсе, речь о том, что, например, в андроиде сама система отвечает за JDBC-драйвер, в яблокодевайсах, думаю, тоже - соответственно, способ подключения может отличаться от аналогичного для PC.
ScorpioT1000, очередной гуглокостыль, хотя и удобный, спорить не буду. Да, я велосипедист и для сриализации пользуюсь самым разным говном, начиная с чужой библиотеки для сериализации объектов в JSON по аннотациям и заканчивая самодельным велосипедом, генерирующим код классов данных по шаблону, причем встроенным в процесс сборки способом. Это когда ORM на основе Hibernate не годится.

prog, к сожалению я не могу протестировать работоспособность под андроидом и ios, ибо для этого нет у меня лецензии. Но если судить по тому материалу, что я читал, то для Win, Unix, MacOS и iOS это должно работать.

и кстати не стоит хранить оружие, создавайте сразу базу предметов или способностей, потому что хранить базы разных типов отдельно - головная боль

  • 1 (Текущая страница)
  • 2
Справка