纳金网

标题: UniDdatabase插件学习笔记1 [打印本页]

作者: 艾西格亚    时间: 2012-10-31 15:12
标题: UniDdatabase插件学习笔记1
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! 写到这个地方,野猪先生有点,不舒服了.看着这些东东,感觉好像么有系统的想把野猪的想法和他认为注意的地方都给大家一一的介绍一下,但是碍于时间.以后有机会在进行说明吧!里面还有很多好东西呢,读者可以自己看看.有什么问题和野猪先生一块交流进步.

作者: 艾西格亚    时间: 2012-10-31 15:25
感谢Mr.野猪的无私奉献与分享!

作者: 所罗门封印    时间: 2012-10-31 19:28
求插件学习,试用版也可以。
作者: 王者再临    时间: 2012-10-31 19:37
原帖由  所罗门封印  于 2012-10-31 19:28 发表:

                                                                                        求插件学习,试用版也可以。
                                                                               
-----------------------------------------------------
我也要一份
作者: may    时间: 2012-11-2 18:50
原帖由  所罗门封印  于 2012-10-31 19:28 发表:

                                                                                        求插件学习,试用版也可以。
                                                                               
-----------------------------------------------------
我也来一个试用
作者: 王者再临    时间: 2012-11-26 21:14
支持一下
作者: Zack    时间: 2013-2-24 03:42
支持一个,最好有试用版。

作者: 雅雅    时间: 2013-2-24 04:45
祝大家元宵快乐,继续努力学习Unity!!

作者: animan    时间: 2013-2-24 07:38
祝大家元宵快乐,继续努力学习Unity!!
作者: ku    时间: 2013-2-24 09:02
谢谢真是提供了一种思路哦

作者: Zack    时间: 2013-2-24 17:33
好资料,值得再次阅读!

作者: animan    时间: 2013-2-25 08:21
只是想感谢你的慷慨..

作者: lsermao    时间: 2013-2-25 10:29
只是想感谢你的慷慨..
作者: fgdf#dfg    时间: 2013-2-25 15:35
学习学习!!!!!!!!        
作者: 王者再临    时间: 2013-2-26 00:15
支持一个,希望楼主继续分享好的资源

作者: Zack    时间: 2013-2-26 02:56
希望楼主发布更多的教程!

作者: 烟雨    时间: 2013-5-31 22:46
Mr.野猪是哪个大神啊。。厉害
作者: shengbin88    时间: 2013-8-15 14:44
好繁杂啊
作者: xielei69    时间: 2013-12-9 16:09
不错哦,谢谢
作者: jonlei    时间: 2013-12-9 16:19
这个插件挺不错的样子
作者: yinzhuo    时间: 2013-12-10 12:41
感谢分享。  回复 赚点钱。。。。
作者: hariboot    时间: 2013-12-10 13:05
我想问下这个支持何种数据格式
作者: yinyuanqings    时间: 2014-2-25 09:48
很有用!
作者: eugen    时间: 2014-6-19 14:37
感谢分享




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5