123 第1页 | 共3 页下一页
返回列表 发新帖
查看: 11797|回复: 23
打印 上一主题 下一主题

[教程] UniDdatabase插件学习笔记1

[复制链接]

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

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

跳转到指定楼层
楼主
发表于 2012-10-31 15:12:05 |只看该作者 |倒序浏览
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! 写到这个地方,野猪先生有点,不舒服了.看着这些东东,感觉好像么有系统的想把野猪的想法和他认为注意的地方都给大家一一的介绍一下,但是碍于时间.以后有机会在进行说明吧!里面还有很多好东西呢,读者可以自己看看.有什么问题和野猪先生一块交流进步.
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏1 支持支持0 反对反对0
回复

使用道具 举报

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

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

沙发
发表于 2012-10-31 15:25:40 |只看该作者
感谢Mr.野猪的无私奉献与分享!
回复

使用道具 举报

8

主题

4

听众

1237

积分

助理设计师

Rank: 4

纳金币
61
精华
0
板凳
发表于 2012-10-31 19:28:44 |只看该作者
求插件学习,试用版也可以。
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-10-31 19:37:25 |只看该作者
原帖由  所罗门封印  于 2012-10-31 19:28 发表:

                                                                                        求插件学习,试用版也可以。
                                                                               
-----------------------------------------------------
我也要一份
回复

使用道具 举报

may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52336
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

5#
发表于 2012-11-2 18:50:12 |只看该作者
原帖由  所罗门封印  于 2012-10-31 19:28 发表:

                                                                                        求插件学习,试用版也可以。
                                                                               
-----------------------------------------------------
我也来一个试用
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2012-11-26 21:14:22 |只看该作者
支持一下
回复

使用道具 举报

Zack    

459

主题

1

听众

5478

积分

高级设计师

Rank: 6Rank: 6

纳金币
5531
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2013-2-24 03:42:02 |只看该作者
支持一个,最好有试用版。
回复

使用道具 举报

733

主题

5

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
6520
精华
14

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2013-2-24 04:45:17 |只看该作者
祝大家元宵快乐,继续努力学习Unity!!
回复

使用道具 举报

0

主题

2

听众

6150

积分

高级设计师

Rank: 6Rank: 6

纳金币
62
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2013-2-24 07:38:14 |只看该作者
祝大家元宵快乐,继续努力学习Unity!!
回复

使用道具 举报

ku 智囊团   

89

主题

2

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
25
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2013-2-24 09:02:05 |只看该作者
谢谢真是提供了一种思路哦
回复

使用道具 举报

123 第1页 | 共3 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

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

GMT+8, 2024-11-17 23:34 , Processed in 0.246377 second(s), 28 queries .

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

© 2008-2019 Narkii Inc.

回顶部