查看: 3380|回复: 0
打印 上一主题 下一主题

[Unity3D插件相关]UniDdatabase插件学习笔记

[复制链接]

5472

主题

6

听众

1万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
76544
精华
23

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

跳转到指定楼层
楼主
发表于 2012-12-6 22:38:17 |只看该作者 |倒序浏览
    今天跟大家分享的是[unity3d插件相关]UniDdatabase插件学习笔记,朋友说不错,特分享到纳金网让大家交流一下~。



    在使用Unity3D引擎制作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!执行项目,看下效果,如下:







Mr.野猪 2012/10/30/凌晨1点(谢谢作者分享,更多3D资讯尽在web3D纳金网http://www.narkii.com/)
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-27 12:44 , Processed in 0.095219 second(s), 31 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部