标签:uniddatabase
UniDDatabase可以处理的数据类型:INT,TEXT,FLOAT,DATE,TIME,Prefab,Texture2D,Audio,Position,Rotation,ScriptFile等。文件夹结构:UniDDataBase的文件夹结构帮助开发者管理文件。所有你想让UniDDatabase帮你管理的内容你都需要放到正确地文件夹中。音频剪辑放在audio_uni 文件夹。UniDDatabase文件自动放在DDatabase_uni文件夹。Prefabs在prefab_uni文件夹。图片放在Texture_2D_uni文件夹。支持unity3d引擎的独立版和专业版的用户.100%的兼容unity引擎,使用一行代码访问一行中的任何数据.他访问数据的速度是1000行的查询只需要0.193ms.
UnidDDataBase是用来完成本地数据存储读取的数据库Unity插件,它通过txt文件保存数据,或者更确切的说是将数据表以自己独特的字符串格式保存到txt文件中。作为数据库最基本的操作:增、删、改、查。已经知道,这个插件使我们可以手动创建数据表,填写数据,更改数据,增加记录,删除记录。那么下面介绍如何用代码动态的对数据表操作。
其实这些方法UniDDataBase已经帮我们封装好了我们只需要调用,这些方法在UniDDataBaseCs.cs文件中都是类方法。
调用方法时首先在脚本中要声明public TextAsset 字段名,一定将要操作的txt文件拖入,不能通过Resources.Load()加载。
1.增加记录:
public static void AddNewRecord(TextAsset ddatabase)
Description:它会为数据表中添加一行记录,并赋上默认值。
2.删除记录:
public static void DeleteRecord(TextAsset ddatabase,int recordNumber)
Description:删除第recordNumber行记录。
注意:若全部删除数据表中的数据时需要从后往前删,反之,就会发现某些行未被删除,因为数据表每删掉一行要将剩余的行往前移动一次。
3.更新数据:
提供了更新数据表一个单元格数据的函数了,但没看到能提供一下子可以更新数据表一行记录的函数。当然这已经足够了。
public static bool UpdateCell(TextAsset ddatabase,string tKeyCellData,int userInputInt)
Description:这是一个更新一个int型单元格的方法,当然对应的其他类型的还有很多。
遇到错误:Programmer Error!!!This cell Does not support INT, itsupports: NULL;
说明你更新的单元格根本不存在,看行号和列号是否过界。
4.查询数据:
只提供了查询某个单元格数据的函数。对于每个类型都有单独对应的函数,下面是int型的方法:
public static int GetIntWhereColumnRowEquals(TextAsset ddatabase,int columnNumber,int rowNumber)
Description:获得第rowNumber行第columnNumber列的单元格的值。
public static String[] GetArrayOfDdKeyInColumn(TextAsset ddatabase,string columnName)
Description:获得名字为columnName的列所有值。
5.其他函数介绍:
public static string GetColumnName(TextAsset ddatabase,int rowNumber)
Description:通过列号获得列名。rowNumber应为colmunNumber.在其他类中也有行号和列号参数不对应的情况,到时候自己试一试。
public static String[] GetArrayOfDdKeyInColumn(TextAsset ddatabase,string columnName)
Description:获得数据库文件中某列对应的所有DdKey,即txt数据文件中每一行中的键
public static String[] GetArrayOfTextInColumnByPattern(TextAsset ddatabase,string columnName,Enum typeOfOperation,string stringPattern)
Description:通过某种方式获得某列中的一些值,其中typeOfOperation这个枚举一定要像插件中例子中的那个枚举声明的那样,不能改变,因为我看实现代码中用到了枚举值对应的字符串来做判断,所以这个枚举的声明一定得是这样:
[System.Serializable]
public enum OperationType
{
All,
Equals,
Contains,
Greater,
GreaterThanOrEqual,
LessThan,
LessThanOrEqual,
Between
}
public static int GetTotalColumns(TextAsset ddatabase)
Description:获得数据表总列数
public static int GetTotalRows(TextAsset ddatabase)
Description:获得数据表总行数
我自己也实现了一下这个函数:
using System.text;
using System.IO;
private int GetTotalRows (string txtPath, int columnNumber) {//columnNumber
表示数据表有几列字段
using (StreamReader read = new StreamReader(txtPath, Encoding.Default))
{
return (read.ReadToEnd().Split(‘\n‘).Length-4)/(2*columnNumber) - 1;//kai tou 3 and jiewei 1;
}
}
Tips:
1>在txt文件中你会发现类似"EnemyContentTEXT0Default.txt[@*_*@]EnemyContentTEXTTable[@-_*@]ColumnNumber=0[@*_-@]RowNumber=2[@_@]INT"的字符串,这是一条记录值类型的键值对,"INT"前面都是UniDDataBase自己在解读该txt文件时的键,"INT"是值,其他行类似。这条格式特殊的字符串是通过PseudoLinqDatabase_unity类中的public static string GetCellDataKeyStatic(string currentDatabaseName,string currentTableName,int rowNumber,int columnNumber)返回的。当然该类是Editor文件夹中类我们无法调用,我提醒的是我们可以重命名为自己的类来调用哦,当然其中涉及到Editor类的东西都要删掉。
2>创建数据表时表名中最好不要夹杂数字,具体原因。。。
标签:uniddatabase
原文地址:http://blog.csdn.net/wuming22222/article/details/42846883