在unity3d中创建本地数据库

时间:2014-09-04 14:31:10

标签: database unity3d

我计划在Unity3D中开发游戏。我没有选择yed,如果它是javascript,c#script或boo,作为统一IDE提供的开发语言。

在我的游戏中,我需要存储游戏状态:用户名,关卡,游戏移动,当前状态,积分以及应该保存的所有内容。 我想让用户在某个特定时间保存游戏,然后让我们说 几个小时,当他想继续游戏时,他将能够从他停止的点开始加载游戏。

所以我知道也许我需要2个表,一个用于用户数据,另一个用于每个游戏   - 保存游戏状态..

但我想知道是否有任何选项可以将本地数据库添加到Unity?

我看到这个tutorial描述了如何序列化对象以保存游戏状态..但我不知道这是否能满足我的游戏需求

2 个答案:

答案 0 :(得分:6)

您可以查看this unity answer以获取有关使用sqlite的帮助。

但是在大​​多数情况下,我会使用序列化而不是本地数据库。

数据库的优势在于您可以轻松搜索数据。

序列化的优点在于,您可以按照自己的方式创建类结构,只需保存/加载它,而无需任何适配器和解析。

如果我拥有大量数据,我会使用数据库,例如数千行。或者,如果我的数据具有复杂的关系,即许多表之间存在关系。否则我认为使用序列化更容易,也更少工作。

答案 1 :(得分:0)

请转到此处以寻求适用于我的解决方案:https://medium.com/@rizasif92/sqlite-and-unity-how-to-do-it-right-31991712190

引用并包含以下GitHub sqllite-unity-plugin:https://github.com/rizasif/sqlite-unity-plugin

使用的代码如下:

using UnityEngine;
using System.Data;
using Mono.Data.Sqlite;
using System.IO;

public class SqliteTest : MonoBehaviour {

    // Use this for initialization
    void Start () {

        // Create database
        string connection = "URI=file:" + Application.persistentDataPath + "/" + "My_Database";

        // Open connection
        IDbConnection dbcon = new SqliteConnection(connection);
        dbcon.Open();

        // Create table
        IDbCommand dbcmd;
        dbcmd = dbcon.CreateCommand();
        string q_createTable = "CREATE TABLE IF NOT EXISTS my_table (id INTEGER PRIMARY KEY, val INTEGER )";

        dbcmd.CommandText = q_createTable;
        dbcmd.ExecuteReader();

        // Insert values in table
        IDbCommand cmnd = dbcon.CreateCommand();
        cmnd.CommandText = "INSERT INTO my_table (id, val) VALUES (0, 5)";
        cmnd.ExecuteNonQuery();

        // Read and print all values in table
        IDbCommand cmnd_read = dbcon.CreateCommand();
        IDataReader reader;
        string query ="SELECT * FROM my_table";
        cmnd_read.CommandText = query;
        reader = cmnd_read.ExecuteReader();

        while (reader.Read())
        {
            Debug.Log("id: " + reader[0].ToString());
            Debug.Log("val: " + reader[1].ToString());
        }

        // Close connection
        dbcon.Close();

    }

    // Update is called once per frame
    void Update () {

    }
}