在unity3d中创建本地数据库

问题描述 投票:4回答:2

我打算用Unity3D开发一款游戏。我没有选择yed,如果它将在javascript,c#脚本或boo,作为unity IDE提供的开发语言。

在我的游戏中,我需要存储游戏状态:用户名,等级,游戏动作,当前状态,积分和所有应该保存的东西。我想让用户在一定的时间内保存游戏,比如说几个小时后,当他想继续游戏时,他将能够从他停止的地方加载游戏。

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

但我想知道是否有任何选项可以添加一个本地DB到Unity中?

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

database unity3d
2个回答
8
投票

你可以看看 这个统一的答案 以获得使用sqlite的一些帮助。

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

数据库的优点是你可以很容易地搜索你的数据。

序列化的优点是,你可以按照你想要的方式来制作你的类结构,并且不需要任何适配器和解析就可以直接加载它。

如果我有大量的数据,比如数千行,我会使用数据库。或者如果我的数据有复杂的关系,即很多表之间有关系。否则,我认为使用序列化更容易,更省事。


0
投票

请到这里查看一个对我有效的解决方案。https:/medium.com@rizasif92sqlite-and-unity-how-to-do-it-right-31991712190。

其中引用并包含这个GitHub sqllite-unity-plugin。https:/github.comrizasifsqlite-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 () {

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.