Saludos amigos.
Hoy os traigo un ejemplo de como crear una base de datos con SQLite, crear el código necesario en un texto y como escribirlo en un archivo binario.
#pragma strict #pragma downcast import System; import System.Data; import Mono.Data.Sqlite; import System.IO; import System.Reflection; class Data_Ficha_ProgresoJugador extends System.Object { var vidaMax : int = 100; var vidaActual : int = 100; var cansancioMax : int = 100; var cansancioActual : int = 100; var hambreMax : int = 100; var hambreActual : int = 100; var manaMax : int = 100; var manaActual : int = 100; var estaminaMax : int = 100; var estaminaActual : int = 100; var sedMax : int = 100; var sedActual : int = 100; } //////////////////////////////////// private var conexion : IDbConnection; private var comando : IDbCommand; private var reader : IDataReader; //////////////////////////////////// function Awake () { DontDestroyOnLoad (this); } //////////////////////////////////// var log : boolean = true; var nombreJugador : String = "NombreIni"; var nombrePartida : String = "000"; function OnGUI () { if (GUI.Button(Rect(10,10,200,20),"CreaDB_Partida")){ CreaDB_Partida (nombreJugador, nombrePartida, 0, 0, null); } if (GUI.Button(Rect(10,40,200,20),"codigoSQL Data Lineal")){ Log_Crea_CodigoSQL_Lineal (false); } if (GUI.Button(Rect(10,60,200,20),"codigoSQL Data")){ Nueva_DataDb_Partida (""+nombreJugador, 0, 0, null); } if (GUI.Button(Rect(10,90,200,20),"LogCreaDb_bin")){ Log_CreaDB_bin (); } if (GUI.Button(Rect(10,110,200,20),"Log_LeeDB_bin")){ Log_LeeDB_bin (); } if (GUI.Button(Rect(10,140,200,20),"Log_Crea_Txt_DB")){ Log_Crea_Txt_DB (); } if (GUI.Button(Rect(10,170,200,20),"Borra_Jugador")){ Borra_Jugador (nombreJugador); } if (GUI.Button(Rect(10,190,200,20),"BorraDB_Partida")){ BorraDB_Partida (nombreJugador, nombrePartida); } } function Start () { if(log){Debug.Log("persistentDataPath --> " + Application. persistentDataPath);} if(log){Debug.Log("dataPath --> " + Application. dataPath);} CreaCarpetas (); } function Update () { } function CreaCarpetas () { if (!Directory.Exists (Application.persistentDataPath + "/SaveGame")) { Directory.CreateDirectory (Application.persistentDataPath + "/SaveGame"); } if (!Directory.Exists (Application.persistentDataPath + "/Temp")) { Directory.CreateDirectory (Application.persistentDataPath + "/Temp"); } if (!Directory.Exists (Application.persistentDataPath + "/Resources")) { Directory.CreateDirectory (Application.persistentDataPath + "/Resources"); } } //////////////////////////////////// //////////////////////////////////// var codigoSQL : String[]; var codigoSQL_bin : String[]; var codigoSQL_Lineal : String; function Log_Crea_CodigoSQL_Lineal (bol:boolean){ // Rellena codigoSQL Nueva_DataDb_Partida (""+nombreJugador, 0, 0, null); // RESET codigoSQL_Lineal codigoSQL_Lineal = ""; for(var i : int = 0;i< codigoSQL.Length;i++){ if(codigoSQL[i] != ""){ codigoSQL_Lineal += codigoSQL[i]; if(bol){ codigoSQL_Lineal += "\r\n"; } } } } /////////////// bin ////////////////// // BIN --> CreaDB function Log_CreaDB_bin (){ var _ruta : String = Application.persistentDataPath+"/SaveGame/"; var fs : FileStream; var w : BinaryWriter; if (File.Exists(_ruta+"LogCreaDb_bin.dat")){ fs = new FileStream(_ruta+"LogCreaDb_bin.dat", FileMode.Truncate); }else{ fs = new FileStream(_ruta+"LogCreaDb_bin.dat", FileMode.Create); } w = new BinaryWriter(fs); Log_Crea_CodigoSQL_Lineal (false); w.Write(codigoSQL_Lineal); w.Close(); fs.Close(); } // BIN --> LeeDB var readerReadByte : int = 0; function Log_LeeDB_bin (){ var lineArray = new Array(); var _ruta : String = Application.persistentDataPath+"/SaveGame/"; if (File.Exists(_ruta+"LogCreaDb_bin.dat")){ var fs : FileStream = new FileStream(_ruta+"LogCreaDb_bin.dat", FileMode.Open, FileAccess.Read); var reader : BinaryReader = new BinaryReader(fs); reader.BaseStream.Position = 0x00000000; var _bytes : byte[]= reader.ReadBytes(readerReadByte); lineArray.Add(reader.ReadString()); fs.Close(); } codigoSQL_bin = lineArray.ToBuiltin(String) as String[]; } /////////////// Txt ////////////////// // Txt --> CreaDB function Log_Crea_Txt_DB (){ if (!Directory.Exists (Application.persistentDataPath + "/SaveGame/")) { Directory.CreateDirectory (Application.persistentDataPath + "/SaveGame/"); } Nueva_DataDb_Partida (""+nombreJugador, 0, 0, null); var _ruta : String = Application.persistentDataPath+"/SaveGame/"; var sw : StreamWriter = new StreamWriter(_ruta+"LogCreaDb.txt", true); for(var i : int = 0;i< codigoSQL.Length;i++){ sw.WriteLine(codigoSQL[i]); } sw.Close(); } /////////////// Borra DataBase (Partida) ////////////////// function BorraDB_Partida (jugador : String, partida : String){ var dirData : String = Application.persistentDataPath + "/SaveGame/" + jugador; var ruta : String = Application.persistentDataPath + "/SaveGame/" + jugador + "/" + partida; if (Directory.Exists (dirData)) { var dirInfo : DirectoryInfo = new DirectoryInfo(dirData); for(var file : FileInfo in dirInfo.GetFiles() ){ file.Delete(); } } } /////////////// Borra Carpeta (Jugador) ////////////////// function Borra_Jugador (jugador : String){ var dirData : String = Application.persistentDataPath + "/SaveGame/" + jugador; if (Directory.Exists (dirData)) { Directory.Delete(dirData,true); } } /////////////// Crea DataBase (Partida) ////////////////// function CreaDB_Partida (jugador : String, partida : String, Tipo : int, Id : int, progresoData : Data_Ficha_ProgresoJugador){ if (!Directory.Exists (Application.persistentDataPath + "/SaveGame/" + jugador)) { Directory.CreateDirectory (Application.persistentDataPath + "/SaveGame/" + jugador); } Nueva_DataDb_Partida (""+jugador, Tipo, Id, progresoData); RutaToURI(); _URI = "URI=file:" + rutaURI + "SaveGame" + "\\" + "\\" + jugador + "\\" + "\\" + partida; if(log){Debug.Log("_URI --> " + _URI);} try { conexion = new SqliteConnection(_URI); conexion.Open(); Log_Crea_CodigoSQL_Lineal (false); if(codigoSQL_Lineal != ""){ EjecutaCodigoSQL(codigoSQL_Lineal); } CierraDB(); }catch(e){ Debug.Log(":::Error::: CreaDB_Partida ()"); Debug.Log(e); } } function Nueva_DataDb_Partida (Nombre : String, Tipo : int, Id : int,progresoData : Data_Ficha_ProgresoJugador){ var pun : int = 0; codigoSQL = new String[4]; codigoSQL[0] = "CREATE TABLE Jugador (Nombre Text, Tipo INT, Id INT);"; codigoSQL[1] = "INSERT INTO Jugador VALUES('"+Nombre+"', "+Tipo+", "+Id+");"; codigoSQL[2] = "CREATE TABLE Progreso (Nombre Text, Valor INT, Id INT);"; var _PD : Data_Ficha_ProgresoJugador = new Data_Ficha_ProgresoJugador(); if(progresoData != null){ _PD = progresoData; } pun = codigoSQL.Length-1; var Type_PD : Type = typeof(Data_Ficha_ProgresoJugador); var fields_PD : FieldInfo[] = Type_PD.GetFields(BindingFlags.Public | BindingFlags.Instance); codigoSQL = AjustaLengthArray(codigoSQL, fields_PD.Length); for(var i : int = 0; i < fields_PD.Length; i++){ var nombre : String = fields_PD[i].Name; var valor : int = fields_PD[i].GetValue(_PD); codigoSQL[pun+i] = "INSERT INTO Progreso VALUES('"+nombre+"', "+valor+", "+i+");"; } } function AjustaLengthArray(_codigoSQL : String[], lenPlus:int){ var query : String[] = _codigoSQL; var queryTemp : String[] = new String[query.Length+lenPlus]; if (lenPlus > 0) { if (query.Length > 0) { for(var i : int = 0; i < query.Length; i++){ queryTemp[i] = query[i]; } }else{ queryTemp = new String[lenPlus]; } return queryTemp; }else{ return query; } } //////////////////////////////////// function EjecutaCodigoSQL(codigoSQL : String){ var query : String; query = "" + codigoSQL; comando = conexion.CreateCommand(); comando.CommandText = query; reader = comando.ExecuteReader(); } function CierraDB(){ reader.Close(); reader = null; comando.Dispose(); comando = null; conexion.Close(); conexion = null; } //////////////////////////////////// var rutaURI : String; var _URI : String; function RutaToURI(){ //Uniform Resource Identifier or URI rutaURI = ""; var dataURI : String []; var ruta : String = Application. persistentDataPath; dataURI = ruta.Split(char.Parse("/")); for(var i : int = 0;i< dataURI.Length;i++){ rutaURI += dataURI[i] + "\\" + "\\"; } if(log){Debug.Log("rutaURI --> " + rutaURI);} } //////////////////////////////////// /* https://www.sqlite.org/inmemorydb.html https://msdn.microsoft.com/es-es/library/system.io.filesysteminfo(v=vs.110).aspx https://msdn.microsoft.com/es-es/library/system.io.directoryinfo(v=vs.110).aspx https://msdn.microsoft.com/es-es/library/system.reflection.fieldinfo(v=vs.80).aspx https://msdn.microsoft.com/es-es/library/system.io.binaryreader(v=vs.110).aspx https://msdn.microsoft.com/es-es/library/system.io.filestream(v=vs.110).aspx https://msdn.microsoft.com/es-es/library/ms404377(v=vs.110).aspx */ ////////////////////////////////////