Код Sqlite C# работает в редакторе Unity, но перестает работать после компиляции

Я столкнулся с проблемой, что моя игра отлично работает в Unity 3d IDE, но в тот момент, когда я ее компилирую, она останавливается в определенный момент. На самом деле, когда мой код sqlite выполняется. Но не только при инициализации!

Итак, этот код работает нормально:

/// <summary>
/// Basic initialization of SQLite This will be activated by the manager script 
/// </summary>
public static void SQLiteInit ()
{
    string SQL_DB_LOCATION = @"URI=file:C:\temp\inlusio_data\InlusioDB.sqlite";
    mConnection = new SqliteConnection(SQL_DB_LOCATION);
    mCommand = mConnection.CreateCommand();
    mConnection.Open();
    ExecuteQuerry("PRAGMA page_size = " + "4096" + ";");
    ExecuteQuerry("PRAGMA synchronous = " + "1" + ";");
    mConnection.Close();
}

Код ExecudeQuerry, кажется, работает нормально, так как сработала приведенная выше часть моего кода. Вот код ExecudeQuerry:

    public static void ExecuteQuerry (string sqlcomand)
{
    Debug.Log(sqlcomand);
    mCommand.CommandText = sqlcomand;
    mCommand.ExecuteNonQuery();
}

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

public static void InitialSavingsToDB (string chiffre, string EasyDelay, string HardDealy, string session)
{
/// Subject code 
ExecuteQuerry("INSERT INTO 'Subject'('Subject_Number','EasyDifficultyLevel','HardDifficultyLevel') VALUES ('" + chiffre + "','" + EasyDelay + "','" + HardDealy + "');");
}

Я тоже так пробовал:

public static void InitialSavingsToDB (string chiffre, string EasyDelay, string HardDealy, string session)

{
    /// Subject code 
    mConnection.Open();
    mCommand.CommandText = "INSERT INTO 'Subject'('Subject_Number','EasyDifficultyLevel','HardDifficultyLevel') VALUES ('" + chiffre + "','" + EasyDelay + "','" + HardDealy + "');";
    mCommand.ExecuteNonQuery();


    mConnection.Close();      

}

Возможно, стоит упомянуть, что я вызываю функцию InitialSavingsToDB из моего ManagerScript, которая объявлена ​​как

public class ManagerScript : MonoBehaviour {
...
...
...
private void Start ()
    {
        ...
        testofsql.SQLiteInit(); // initialisation of the Data Base
        ...
...
...

    }

...
...
}

Итак, мой код работает нормально, данные отлично сохраняются, когда я тестирую игру из редактора Unity 3d. В тот момент, когда я его компилирую, он просто не продолжается в игре. Ни ошибок, ничего. Я даже могу бегать. Но игра застряла.

Я честно не знал, как это решить. Уже 2 недели гуглил, чтобы заставить sqlite работать в Unity, старался избегать ошибок, все отлаживал, пока не нашел источник проблемы и не понял... надеюсь, кто-нибудь может помочь.

Большое спасибо!

Здоровья, Петр


person Petr Legkov    schedule 10.01.2015    source источник
comment
как примечание, иногда единство не копирует dll в папку сборки. по крайней мере, в случае с sqlite, который я использовал :)   -  person Petr Legkov    schedule 24.04.2015


Ответы (2)


Какова ваша целевая платформа? Андроид, IOS, ...?

Имейте в виду, что для разных платформ unity3d использует разные сборки sqlite.

Попробуйте проверить следующий проект https://github.com/codecoding/SQLite4Unity3d и сравнить данные в папке Plugins. с тем, что используется в вашем проекте.

person Set    schedule 11.02.2015
comment
спасибо! на самом деле проблема была именно в том, что sqlite dll не копировалась в папку билда. какой-то странный баг, наверное. это было для настольных окон. - person Petr Legkov; 24.04.2015

Я бы предложил попробовать использовать библиотеку, разработанную для Unity. Лично это то, что я делал для обработки многоплатформенной обработки SQLite. Я настоятельно рекомендую эту библиотеку/оболочку

SQLite стал проще для Unity3d http://codecoding.github.io/SQLite4Unity3d

В настоящее время я занимаюсь улучшением этого и делаю его еще более удобным для работы. Однако это, вероятно, хорошая отправная точка!

УДАЧИ!

person Jeffery Miller    schedule 07.03.2016