效果展示: ![]() ![]()
![]() ![]() ![]() 准备工作: 下面是我总结的流程,目的是使本文思路更加清晰一些: 1.Android端代码可以在Eclipse中开发(AndroidStudio没有试,应该也可以) 2.Unity3D端代码要在Unity中开发 3.Android和Unity3D端,两边都需要加入一些代码从而可以使之关联交互。 4.将Android端代码编译成jar文件以插件形式放入到Unity端中 5.在Unity中将整个项目Build成apk文件,然后安装到手机或模拟器里运行 本文主要讲解1,2,3。对于4,5建议大家去看雨松MOMO的Unity博客的第17篇和第18篇。 UnityPlay: 在编写Android端和端代码前,有必要先了解一下可以使两部分交互的类UnityPlay。 个人理解UnityPlay是个Unity提供给外部交互的一个接口类。为什么是“个人理解”?这我不得不爆粗口了,TMD官网 根本就没有相关的API和文档(如果大家有谁找到一定给我来一份,就当我骂自己了)。 在关联Android时,想拿到UnityPlay以及相关类的jar包可以从下面的地址找到:Unity安装路径\Editor\Data\PlaybackEngines\androidplayer\bin在bin文件夹下有一个classes.jar的jar文件,它就是我们想要的。 而在bin同目录下有一个src文件,点击到最后有3个类,分别是UnityPlayerActivity.java,UnityPlayerProxyActivity.java,UnityPlayerNativeActivity.java。前两个打开个后只有一行代码,说的是UnityPlayerActivity和UnityPlayerProxyActivity 都继承自UnityPlayerNativeActivity。而打开UnityPlayerNativeActivity中居然有代码,而且我估计这应该是 UnityPlayerNativeActivity的源码。由于关于UnityPlay的资料我只找到这么一个,所以我把UnityPlayerNativeActivity中 的代码都贴出来,如果我注解有不对的地方希望大家指正。
[AppleScript] 纯文本查看 复制代码
看完这个类后就知道了为什么在自定义的Activity中继承了UnityPlayerActivity等类以后,只要重写了onCreate并调用 super.onCreate()方法后不需要任何其他的代码就会自动的显示出Unity3D的视图。因为初始化Unity视图的代码都在 UnityPlayerNativeActivity父类中实现了。 android端代码: 在写android代码的时候,一定要导入Unity3D提供给我们的jar包,jar包的位置我在上面说了。引入jar包加入到 buildpath中这些最基本的我就不多说了。要想和Unity交互,我们就不能继承android提供给我们的Activity,我们 需要继承刚才jar包中引入的Unity提供的Activity类,一共有这么3个: UnityPlayerActivity,UnityPlayerProxyActivity,UnityPlayerNativeActivity。具体区别不知道,因为没有文档,没有API, 没有源码(这里再次鄙视一下)。刚才我们看过UnityPlayerNativeActivity的代码(虽然很短,但我觉得这个就是源码 ),知道UnityPlayerActivity,UnityPlayerProxyActivity都是它的子类,而且最终父类为NativeActivity。所以我们继承 Unity提供的最外层的子类是最好的选择,我这里选择的是UnityPlayerActivity,因为名字最简单,觉得该封装的都应 该封装好了。
[AppleScript] 纯文本查看 复制代码
最后看一下Android端的布局文件,布局很简单,上下各有一个button按钮,两个按钮中间是Unity的视图。
[AppleScript] 纯文本查看 复制代码
Android端的代码就介绍完了,很简单。唯一的难点就是UnityPlayerActivity和UnityPlayer的使用,就这两个破 玩意花了我好几天的时间,很简单的东西不知道为什么官方不给个文档或者API(也可能我太挫没找到。。。) Unity3D端代码: 先看一下我的项目结构:
JavaScript存放的是脚本 Models存放的是我在Assert Store中下载的免费的一些模型文件 Plugins下是我的Android工程,具体做法参考网上教程(这里推荐雨松大神的第17篇) Prefab我是调整模型后定义的预制体 在场景中,我只有一个摄像机,和一个直射光。将脚本绑定到摄像机上,然后将之前调整好的5个预设模型添 加到脚本的相应对象中。
下面是脚本的代码,关于模型的旋转缩放是直接用了雨松MOMO的一篇文章中的代码,然后再加上了本例中的 一些逻辑而组成的。
[AppleScript] 纯文本查看 复制代码
最后就是在Unity3D中将工程Build成APK文件,然后再手机或模拟器中运行(如果手机或模拟器连着Eclipse则 可以打出log方便调试找错)。 |
Unity3D打包apk的主界面和android组件共同显示
最新推荐文章于 2023-10-24 23:35:59 发布