Как записать значение переменной в базу данных Unity?

402
04 июня 2017, 17:34

Как записать значение переменной счетчика в базу данных sqlite в unity? фрагмент кода:

if (hit.transform.CompareTag("PickUp")) {
    device++;
    Destroy(hit.transform.gameObject);
    if (Application.Quit ()) {
        Application.dataPath + "/stydent.db3";
    }
}

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

Answer 1

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

void OnApplicationQuit(){}

Дальше Application.dataPath + "/stydent.db3"; Это вообще получаете просто string. Если вам надо сохранить в sql базу, вам либо надо писать свой плагин, который в фоновом режиме будет производить запись каких-то параметров, и получать их из вызовов в Unity через CallStatic (либо найти готовый). В этом плане погуглите, ну или вот есть небольшая статья по этой теме туц

p.s. Но имейте ввиду, что OnApplicationQuit вызывается только, вы вызываете Application.Quit(), то есть допустим пользователь нажал кнопку выйти из игры, вы должны вызвать эту функцию. И также пользователь может ее завершить не корректно, через диспетчер, или она "вылетит", и OnApplicationQuit не сработает.

Answer 2

Вы используете плагин для sqlite? Если да, то там всё довольно просто:

При подключении базы вы создаёте подключение к ней и хешируете его:

private SQLiteConnection _connection;
_connection = new SQLiteConnection(dbPath, SQLiteOpenFlags.ReadWrite);

dbPath - путь до базы, включающий и её название. Вторым параметром тип соединения. В базе у тебя есть так называемые Table - таблицы с определёнными столбцами. Создай в unity класс с такими же параметрами, как и в нужной таблице. Например, если тебе нужен только параметр и его значение:

using SQLite4Unity3d;
public class PARAMS {
    [PrimaryKey, AutoIncrement, NotNull]
    public string PARAM { get; set; }
    [NotNull]
    public int VALUE{ get; set; }
    public override string ToString() {
        return string.Format (
            "[mess: Param= {0}, " +
            "value: {1}.]", 
            PARAM , VALUE
        );
    }
}

Для добавления в ДБ делается вызов следующего вида:

    public void InsertParam(string param, int value)
    {
        var p = new PARAMS 
        {
            PARAM = param,
            VALUE = value
        };
        _connection.Insert(p);
    }

Соответственно, как сказали чуть выше, если приложение закроется экстренно, то void OnApplicationQuit(){} не отработает. Поэтому лучше всего сохранять значение сразу после его изменения.

READ ALSO
Парсинг текста на C#

Парсинг текста на C#

Есть такая проблема: когда делаю построчный парсингtxt файла при помощи рег

586
tableAdapter, параметризованный sql запрос

tableAdapter, параметризованный sql запрос

Как можно передать количество параметров, которое может каждый раз меняться в sql запрос? Мне нужно следующий запрос оформить для всевозможного...

360
Разбор Binding DataGrid и ComboBox

Разбор Binding DataGrid и ComboBox

Очень нужно разобраться с тем как работает ComboBox в таблице DataGrid на WPFМне важно чтобы было грамотно разъяснено и правильно реализовано

324
Как программировать на C# в Unreal Engine?

Как программировать на C# в Unreal Engine?

На оффициальном сайте http://mono-uegithub

664