- 最后登录
- 2024-11-17
- 注册时间
- 2012-8-10
- 阅读权限
- 100
- 积分
- 74994
- 纳金币
- 59338
- 精华
- 28
|
Mr.野猪 2012/10/30/凌晨1点
在使用u3d引擎制作3d应用时,往往为了交互需要我们存储一些数据.但是碍于某些限制条件, 我们只能采取一些折中的方式进行数据的存储和读取.往往会给我们的开发带来很多的麻烦.众所周知,在开发中,我们只想着能用最快最好最短的时间,做出来好的产品或完成项目来应对市场和客户的需求.这个时候,我们可以考虑使用第三方无缝隙的插件用于项目中来.下面又野猪先生带给大家一个插件的介绍UniDdatabase.这个是视频游戏组织的数据库可以运行在所有的平台并且不需要任何的配置.他支持unity3d引擎的独立版和专业版的用户.100%的兼容unity引擎,使用一行代码访问一行中的任何数据.他访问数据的速度是1000行的查询只需要0.193ms.看到这里,你肯定是想跟着野猪先生来动手做一下,来感受一下UniDdatabase插件带给我们的惊喜吧.
还是老规矩,下面就是来简单的介绍一下动手教程的一个流程,并且在.讲解的过程中对其注意点进行讲解.在开始动手之前我们需要查看一下插件里内带的一个pdf文档.里面讲解了大体的功能说明和使用方法,以及注意事项.野猪先生,学习使用的是UniDDatabase2.0的文档.大体的做了下笔记,在动手哦之前,大家先留意的看一看.
文件夹结构:
文件夹结构的设计是为了帮助开发人员有效的进行组织.你想要UniDdatabase插件管理的内容应该放在正确的文件夹下面.音频剪切应该放在Audio_Uni文件夹中.UniDDatabase文件会自动放在DDatabase_Uni文件夹中.UniDDatabase_EditorTextures文件夹不能修改,因为他安博涵了编辑器中的图标.预置体要房子Prefab-Uni文件夹中.脚本放在UniDDatabase文件夹下.图片要放在Textture2D_Uni文件夹下.
创建一个新的UniDDatabase
1.单击new按钮,创建一个新的DDatabse.会弹出一个窗口,这个窗口会自动跳转到DDatabase_Uni文件夹下.在输入框中输入数据库的名字.
2.在进行下一步之前,你需要创建一个表(table).在单击创建之后,现在一个新的UniDDatabase已经创建完成.
下面就是动手的过程了!继续前行.
第一步,我们还是要创建一个新的project,把UniDDatabase插件导入到项目中.在插件导入之后,我们可以看到插件的目录结构.有些地方,是需要我们注意的,那就是文件夹结构.在这我大体的根据文档做了下备注.可以参考前文提到的注意事项.
第二步,我们看一下插件里自带的那些例子实现的效果.这些就是我们开始动手之前需要了解的.接着就开始动手我们的练习吧.
一下就是详细的一个小过程啦
首先点击Window菜单下的UniDDatabase选项,如下所示:
之后,会出现如下图所示的界面:
单击创建会弹出如下:
单击保存之后,出现如下截图,野猪先生已对其做了标注说明.
在创建完表之后,就是一个空的结构,如下图:
注意:野猪先生已经见到的录入了几行数据.
下面点击添加按钮一个大加号.弹出如下窗口:
等你添加数据满足一行之后.意思是说,你如果设置了3个字段,你就需要添加3个数据,单击3次添加字段.在操作满足之后,会弹出如下窗口:
通过上面的步骤我们已经创立完了数据库还有数据库中的表,并且在表中存储了几行数据.下面我们就开始脚本的简单说明.
public class EzDateAndTimeSlideShow : MonoBehaviour
{
/*
* Template for using UniDDatabaseCs with Text Array.
*这个就是访问数据查询的模板.很多情况都是一样的!
*/
//DDatabase的文本输入
public TextAsset ddatabase;
//Array of FirstName
public int columnDate;
public string columnTitleOne;
public string[] arrayOfDate;
//Array of LastName
public int columnTime;
public string columnTitleTwo;
public string[] arrayOfTime;
//Drop Down menu with Operation type example(Equals,contains, ect.)
public OperationType searchOperation;
//Integer Primary Key inputs
int currentIndex;
public int lowerIntPriKey;
public int upperIntPriKey;
//string search will only work with "Contains" Operation
public string stringPattern;
//Int for search within a column: Equals,Contains, Greater, GreaterThanOrEqual, LessThan, LessThanOrEqual,
public int intKeyInTable;
//Rect input
Rect dateRect;
Rect TimeRect;
Rect nextButtonRect;
Rect textureNumberRect;
Rect previousButtonRect;
//The Serializable attribute lets you embed a class with sub properties in the inspector.
[System.Serializable]
public enum OperationType
{
All,
Equals,
Contains,
Greater,
GreaterThanOrEqual,
LessThan,
LessThanOrEqual,
Between
}
// Use this for initialization
public void Start()
{
arrayOfDate = null;
arrayOfTime = null;
columnTitleOne = UniDDatabaseCs.GetColumnName(ddatabase,columnDate);
columnTitleTwo = UniDDatabaseCs.GetColumnName(ddatabase, columnTime);
dateRect = new Rect(250, 20, Screen.width, Screen.height);
TimeRect = new Rect(250, 50, Screen.width, Screen.height);
textureNumberRect = new Rect(700, 70, 100, 100);
previousButtonRect = new Rect(10, 10, 100, 50);
nextButtonRect = new Rect(700, 10, 100, 50);
currentIndex = 0;
AllSearchOperations();
}
// Update is called once per frame
void OnGUI()
{
if (arrayOfDate != null || arrayOfTime != null)
{
if (GUI.Button(nextButtonRect, "Next"))
{
currentIndex++;
}
else if (GUI.Button(previousButtonRect, "previous"))
{
currentIndex--;
}
if (currentIndex >= 0)
{
if (currentIndex >= arrayOfDate.Length - 1) //Can't go higher than the last element.
{
currentIndex = arrayOfDate.Length - 1;
}
if (arrayOfDate != null)
{
if (currentIndex < arrayOfDate.Length)
{
GUI.Label(dateRect, "Date[" + currentIndex + "]=" + arrayOfDate[currentIndex]);
}
}
if (arrayOfTime != null)
{
if (currentIndex < arrayOfTime.Length)
{
GUI.Label(TimeRect, "Time[" + currentIndex + "]=" + arrayOfTime[currentIndex]);
}
}
}
else if (currentIndex >= arrayOfDate.Length - 1) //Can't go higher than the last element.
{
currentIndex = arrayOfDate.Length - 1;
}
else currentIndex = 0; //Can't go lower than 0.
GUI.Label(textureNumberRect, currentIndex.ToString() + "/" + (arrayOfDate.Length - 1).ToString()); //The current element number...
}
}
/// <summary>
/// 所有选项的查找
/// </summary>
public void AllSearchOperations()
{
if (searchOperation.ToString()=="All")
{
//得到这一列文本中的行
arrayOfDate = UniDDatabaseCs.GetArrayOfDateInColumn(ddatabase, columnTitleOne);
arrayOfTime = UniDDatabaseCs.GetArrayOfTimeInColumn(ddatabase,columnTitleTwo);
}
else if(searchOperation.ToString()=="Contains")
{
//Get the input by string pattern
arrayOfDate = UniDDatabaseCs.GetArrayOfDateInColumnByPattern(ddatabase,columnTitleOne,searchOperation,stringPattern);
arrayOfTime = UniDDatabaseCs.GetArrayOfTimeInColumnByPattern(ddatabase,columnTitleTwo,searchOperation,stringPattern);
}
else if (searchOperation.ToString()=="Between")
{
//Get the input betweeen lower and upper primary key.
arrayOfDate = UniDDatabaseCs.GetArrayOfDateInColumnByKey(ddatabase, columnTitleOne, searchOperation, lowerIntPriKey, upperIntPriKey);
arrayOfTime = UniDDatabaseCs.GetArrayOfTimeInColumnByKey(ddatabase, columnTitleTwo, searchOperation, lowerIntPriKey, upperIntPriKey);
}
else
{
//Get cell in the column base on the searchOperation selected from dcolumndown Menu, and the lowerLimit.
arrayOfDate = UniDDatabaseCs.GetArrayOfDateInColumnByKey(ddatabase, columnTitleOne, searchOperation, intKeyInTable);
arrayOfTime = UniDDatabaseCs.GetArrayOfTimeInColumnByKey(ddatabase, columnTitleTwo, searchOperation, intKeyInTable);
}
}
}
这个脚本来自项目自带的.把他赋给摄像机,把你刚刚创建的数据库和脚本进行关联.ok!执行项目,看下效果,如下:
ok! 写到这个地方,野猪先生有点,不舒服了.看着这些东东,感觉好像么有系统的想把野猪的想法和他认为注意的地方都给大家一一的介绍一下,但是碍于时间.以后有机会在进行说明吧!里面还有很多好东西呢,读者可以自己看看.有什么问题和野猪先生一块交流进步.
|
|