我计划在Unity3D中开发游戏。我没有选择yed,如果它是javascript,c#script或boo,作为统一IDE提供的开发语言。
在我的游戏中,我需要存储游戏状态:用户名,关卡,游戏移动,当前状态,积分以及应该保存的所有内容。 我想让用户在某个特定时间保存游戏,然后让我们说 几个小时,当他想继续游戏时,他将能够从他停止的点开始加载游戏。
所以我知道也许我需要2个表,一个用于用户数据,另一个用于每个游戏 - 保存游戏状态..
但我想知道是否有任何选项可以将本地数据库添加到Unity?
我看到这个tutorial描述了如何序列化对象以保存游戏状态..但我不知道这是否能满足我的游戏需求
答案 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 () {
}
}