Android 平台上的ARToolKit for Unity
为了更好的在Android平台上使用ARToolKit for Unity,请先浏览Getting Started with ARToolKit for Unity这篇文章。
开发环境需求
- 你必须拥有Unity 的Android Pro 许可才可以将ARToolKit for Unity 添加到你的项目中。
- 运行设备的系统必须在Android 2.3.1版本 (API Level 9)或以上,如果你仅仅使用Square Marker,系统需求降为Android 2.2(API Level 8)或以上。
Player 设置
当你将应用发布到Android 系统时,有一些Player 设置必须要进行配置才能让ARToolKit for Unity 正常工作(那些没有提到的设置,可以按照用户意愿调整):
Resolution and Presentation 界面
- Orientation: “Landscape Left”必须这样才能保证动态影像能够与屏幕匹配。
- Use 32-bit Display Buffer:True
Other Settings 界面
- Bundle Identifier:ARToolKit for Unity 在Android 平台上拥有它自己的AndroidManifest.xml文件。在这个manifest文件中的bundle identifier 被设定为“com.mycompany.myapp”。注意:这个bundle identifier 在应用打包前必须修改成与你在player设定中的bundle identifier 值相同。查看后面的介绍来学习如何修改它。
- Minimum API Level:“Android 2.3.1 ‘Gingerbread’ (API Level 9)”或更高,但是当你仅仅使用Square marker的时候可以设置为“Android 2.2 ‘Froyo’ (API Level 8)”或更高。
- Graphics Level:OpenGL ES 2.0
- Internet Access:“Require”
设置Bundle Identifier
所有Android 平台的应用通过唯一的bundle identifier 进行区分。ARToolKit 为Android 平台提供了一个默认的“com.mycompany.myapp”作为bundle identifier,但是在发布应用之前,这个值必须做出修改。
要注意,当你使用ARToolKit for Unity 时,有两个地方的bundle ID 需要修改:一个在Unity 中的Player 设置中,另一个在“Assets/Plugins/Android/AndroidManifest.xml”这个文件中。
首先在Unity 中设置bundle ID(使用你选择的ID来代替com.mycompany.myapp):
然后,你必须手动修改ARToolKit 自带的Android manifest 文件中的bundle ID。你要找到你的项目文件夹中的 “Assets/Plugins/Android/AndroidManifest.xml”这个文件。用文本编辑器打开它并找到package=”com.mycompany.myapp” 这一行,将等号后面改成在Unity中设定好的bundle ID。
在大型的Android 项目中使用ARToolKit for Unity
通过修改ARToolKit for Unity 的Java 部分来将其融合到大型Android 应用或是对其进行自定义都是可行的。
Unity for Android 提供了最外部的Activity 子类(UnityPlayerActivity)的源码。ARToolKit for Unity 又在它的基础上创建了一个名为UnityARPlayerActivity 的新子类。这个类已经被打包为UnityARPlayer.jar 文件并存储在项目的 Assets/Plugins/Android/路径下。它将在最后打包时被Unity 连接到apk 中。我们也提供了UnityARPlayerActivity 类的源码。你可以在ARToolKit for Unity 的extras/Android UnityARPlayer source/ 目录下找到源码。
下面的几个图片将展示如何将源码打包为.jar 文件。
首先,确保项目已经正确的设定了“android.jar”(该文件在Android SDK中)和Unity 提供的“classes.jar”的位置。
下一步,在Eclipse 中执行export jar 操作(File->Export)
下面这几个类必须被导出:
- org/artoolkit/ar/base/NativeInterface.class
- org/artoolkit/ar/unity/CameraSurface.class
org/artoolkit/ar/unity/UnityARPlayerActivity.class
下面的图片将告诉你如何选择这些类。
当.jar 文件被导出后,将其放到Unity 项目的Assets/Plugins/Android/UnityARPlayer.jar 这个位置。
附录
为什么NFT 只有在API 9以上才能使用?因为在Android 系统2.2.x版本以及之前版本中,嵌入在.apk 中的.jar 文件处理压缩资源的缺陷导致所有压缩资源的文件大小不能超过1MB(即使在一些2.2系统版本中,这个限制可以被厂商调高)。 这也给在Android 2.2 系统上使用的NFT 数据强加了一个1MB的文件大小限制。这个限制在Android 2.3版本中被移除了。