首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)
2012
07-05

Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)

如果大家对Unity中如何使用数据库还不是很了解那么请看我之前的这篇文章。Unity3D研究院之使用C#语言建立本地数据库(二十三)本篇文章我们讨论如何在Unity中打开一个第三方数据库配合Android与编辑器进行同步开发。如下图所示,这个是我目前工程的结构,为了方便调试MOMO使用预定义标签将编辑器与Android平台区分开,方便编辑器与Android平台同时调试。

下图如果看的不清楚,点击图片可查看大图。 不仅在Unity编辑器中可以显示数据库读取的内容,直接编译在真机中也可以显示数据库读取的内容。

Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二) - 雨松MOMO程序研究院 - 1

 

按照上图所示我们把第三方数据库放在Plugins->Android->assets中,切记必须放在这里,否无无效,然后是代码。这个第三方数据库是MOMO以前做测试一个号码归属地的时候制作的。所以数据库的内容还是比较大的,蛤蛤。

DbAccess.cs

 

然后是Test.cs直接把它挂在摄像机对象身上。

 

上面代码中我们使用到了预定于标签,用于编译时区分游戏平台与版本。这么一来我们既可以在编辑器中操作数据库也可以在Android中操作数据库一举两得,主要是是Android平台比较特殊,不能从Unity的Assets资源路径中读取二进制文件。说道二进制文件,这里不仅读取第三方数据库还可以读取其它文件,二进制文件都可以读取,比如文本文件、图片、资源等等。

需要注意的是你得把你的二进制文件放在Plugins->Android->assets中,然后根据下面的路径就可以在Android中读取。

string Path  = jar:file://” + Application.dataPath + “!/assets/” + “你的文件“;

 

另外,使用这种方法读取地方放数据库后,是可以继续向数据库执行插入、删除、修改 、查询、等操作,用起来还是比较方便的。

 

Unity预定义标签的种类还有很多,不仅可以区分平台还可以区分版本。

UNITY_EDITOR Define for calling Unity Editor scripts from your game code.
UNITY_STANDALONE_OSX Platform define for compiling/executing code specifically for Mac OS (This includes Universal, PPC and Intel architectures).
UNITY_DASHBOARD_WIDGET Platform define when creating code for Mac OS dashboard widgets.
UNITY_STANDALONE_WIN Use this when you want to compile/execute code for Windows stand alone applications.
UNITY_WEBPLAYER Platform define for web player content (this includes Windows and Mac Web player executables).
UNITY_WII Platform define for compiling/executing code for the Wii console.
UNITY_IPHONE Platform define for compiling/executing code for the iPhone platform.
UNITY_ANDROID Platform define for the Android platform.
UNITY_PS3 Platform define for running PlayStation 3 code.
UNITY_XBOX360 Platform define for executing Xbox 360 code.
UNITY_NACL Platform define when compiling code for Google native client (this will be set additionally to UNITY_WEBPLAYER).
UNITY_FLASH Platform define when compiling code for Adobe Flash.

Note: These defines were introduced at version 3.0.

Also you can compile code selectively depending on the version of the engine you are working on. Currently the supported ones are:

UNITY_2_6 Platform define for the major version of Unity 2.6.
UNITY_2_6_1 Platform define for specific version 1 from the major release 2.6.
UNITY_3_0 Platform define for the major version of Unity 3.0.
UNITY_3_0_0 Platform define for the specific version 0 of Unity 3.0.
UNITY_3_1 Platform define for major version of Unity 3.1.
UNITY_3_2 Platform define for major version of Unity 3.2.
UNITY_3_3 Platform define for major version of Unity 3.3.
UNITY_3_4 Platform define for major version of Unity 3.4.
UNITY_3_5 Platform define for major version of Unity 3.5. 

 详细内容可以查看官网http://docs.unity3d.com/Documentation/Manual/PlatformDependentCompilation.html

用法就不解释了,地球人都知道。

雨松MOMO希望和大家一起进步,加油~~~最后文本的源码下载:http://vdisk.weibo.com/s/ac3xI

雨松MOMO祝大家学习愉快,哇咔咔,晚安啦啦啦~~

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二)》有 65 条评论

  1. 罗展途 说:

    一直说没有libsqlite.so,可实际上是有的啊

  2. 罗展途 说:

    是不是还要什么权限啊,我已经走到Open了,报错dbConnection.Open ();啊

  3. 搞了一天一夜,原来就是这问题,感谢!

  4. 洋洋 说:

    手机上已经不行了,移过来的数据库没有内容,而且还不能创建表格,加入数据,不知道要怎么搞啊

  5. 艾戈塔特 说:

    在安卓上数据库读取成功了但是写入信息失败了,求解

    • paradise_wu 说:

      你好,请问你使用的是什么方法读取到的,能分享下吗?我能在Application.persistentDataPath文件夹下找到该文件,但是不能使用协程加载也不能读取数据

  6. 贾磊 说:

    数据库文件 一旦连接 导致文件被占用 无法被删除 求解

  7. 90 说:

    博主,请问下libsqlite3.so文件是怎么生成的?我试了下如果没有这个文件,安卓上是无法正常运行的。

  8. 蓝小野 说:

    UNITY_STANDALONE_WIN 和 UNITY_STANDALONE_OSX 没说呀,该怎么处理

  9. using (SqliteDataReader reader = db.SelectWhere(“iseetable”, new string[] { “name”, “email”, “qq” }, new string[] { “name” }, new string[] { “like” }, new string[] { “%姣%” }))我把你的代码改成你这个模糊查询了,然后我就凌乱了string[] name = new string[]{};这个定义改为数组 List temp = new List(); for (int i = 0; i < temp.Count; i) { GUI.skin = skin; GUILayout.Box(“name=” name Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二) - 雨松MOMO程序研究院 - 1 ” “); GUILayout.Box(“qq=” qq Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二) - 雨松MOMO程序研究院 - 2 ” “); GUILayout.Box(“email=” email Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二) - 雨松MOMO程序研究院 - 3 ); }显示也改为数组可是。。 name = reader.GetString(reader.GetOrdinal(“name”));这个报错 不知道怎么改 求指导我是新手大神

  10. using (SqliteDataReader reader = db.SelectWhere(“iseetable”, new string[] { “name”, “email”, “qq” }, new string[] { “name” }, new string[] { “like” }, new string[] { “%姣%” }))我把你的代码改成你这个模糊查询了,然后我就凌乱了string[] name = new string[]{};这个定义改为数组 List temp = new List(); for (int i = 0; i < temp.Count; ++i) { GUI.skin = skin; GUILayout.Box(“name=” + name Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二) - 雨松MOMO程序研究院 - 1 +” “); GUILayout.Box(“qq=” + qq Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二) - 雨松MOMO程序研究院 - 2 +” “); GUILayout.Box(“email=” + email Unity3D研究院之在Unity中打开第三方数据库配合Android开发(三十二) - 雨松MOMO程序研究院 - 3 ); }显示也改为数组可是。。 name = reader.GetString(reader.GetOrdinal(“name”));这个报错 不知道怎么改 求指导我是新手大神

  11. 沈杰 说:

    你好,能留下联系方式吗

  12. 高山流水 说:

    松哥,我也遇到了同样的问题,在编辑器里可以但是在真机中不行,求解决啊

  13. 高山流水 说:

    遇到了同样的问题,请问解决了吗

  14. 高山流水 说:

    你们现在解决了吗?我这里也出这个问题了

  15. 高山流水 说:

    大神,我的也倒不出来.apk包,报错为Error building Player: Exception: apk (invokation failed)ERROR: Duplicate file(s) in apk: ‘E:scTempStagingArearaw.ap_’cmd:apk E:scTemp/StagingArea/Package_unaligned.apk -z E:scTemp/StagingArea/assets.ap_ -z E:scTemp/StagingArea/bin/resources.ap_ -nf E:scTemp/StagingArea/libs -f E:scTemp/StagingArea/bin/classes.dex -v -z E:scTemp/StagingArea/raw.ap_stdout;stderr:ERROR: Duplicate file(s) in apk: ‘E:scTempStagingArearaw.ap_’怎么处理一下呢?谢谢松哥~

  16. 说:

    我是直接下的MOMO提供的原文做实验的,在PC没问题, ,真机读不出数据。怎么回事能呢,MOMO能给些提示吗

  17. 说:

    我也是在PC没问题,直接编辑android ,真机读不出数据。怎么回事能呢,MOMO能给些提示吗

留下一个回复

你的email不会被公开。