Ar Unity for Android(一)
在Unity中android调用c++库的接口
在Unity中c#调用c++库的接口
解决问题:CommandInvokationFailure: Unable to convert classes into dex format.See the
在Unity中调用Android的JAVA代码
有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如...
有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去编写Java代码,然后打包jar导入到Unity工程,然后通过Unity提供的调用Android接口的函数去调用jar包中的函数即可。
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
http://www.xuanyusong.com/archives/667
http://www.cnblogs.com/wanqieddy/p/4447594.html
(for Android studio
http://blog.csdn.net/chenj_freedom/article/details/48378211)
在eclipse下新建一个android工程 ArWorldUnity
设置入口的Activity名UnityArActivity
配置AndroidManifest.xml文件
加入android:theme="@android:style/Theme.NoTitleBar.Fullscreen"全屏显示模式
http://www.nowamagic.net/academy/detail/50161622
这错误很明显,也很简单,原来继承自ActionBarActivity的类必须指定固定的集中Theme风格,而这些Theme风格是需要导入V7中的appcompat LIB库工程,编译后再引用才能引用使用。
打开你项目的AndroidManifest.xml,找到android:theme="@style/xxx",改成v7包里提供的方案就行了。比如:
android:theme="@style/Theme.AppCompat" 黑色系
android:theme="@style/Theme.AppCompat.Light" 浅色系
更多色彩方案可以自己在Application Tab页去Browse。
不修改风格,直接删掉ActionBarActivity
重新继承Activity 编译后运行正常
导入Unity相关jar
Jar目录:unity的安装路径D:\ProgramFiles\Unity\Editor\Data\PlaybackEngines\androidplayer\development\bin下的classes.jar
并把SetContentView函数删掉(不然到手机上启动程序的时候就会只看到一句HelloWorld)
再去掉其他多余接口只留onCreate
编译后从ArWorldUnity工程导出Jar包命名arworldunity.jar(后续提供给unity)
Unity下 android插件配置
新建Unity工程
1. 设置PlayerSetting,要与Android的package对应上
2. 在Assets目录下添加Plugins\Android目录,把Android的jar文件,res文件夹,libs文件夹,xml文件放入该目录
重新修改继承UnityPlayerActivity
注意:
A:libs目录下面不要有unity的安装路径D:\ProgramFiles\Unity\Editor\Data\PlaybackEngines\androidplayer\development\bin下的 classes.jar(要删除unity的classes.jar文件)
编译出错
因为4.0以上自带Theme.AppCompat主题 4.0以前版本要使用还得自己添加jar包
http://tieba.baidu.com/p/3147767224
检测eclipse工程,工程自动引入了库V7, 在eclipse下正常,但导出工程jar到Unity后出现编译问题
因为新建Android项目自动引用了appcompat_v7 Libraries 生成了 values-v11 和 values-v14文件夹
values 文件夹 下的style.xml
要么 引入android-support-v4.jar 和 android-support-v7-appcompat.jar appcompat_v7.jar 右键 Add to build Path 应该就没问题 (Unity编译中实际测试失败)
或者去掉引用把style.xml 里的 appCompat.Light 换成
<stylename="AppBaseTheme"parent="android:Theme.Light"></style>
(修正)Eclipse下 重建 工程 ArWorldUnity
将最小Sdk版本设置成4.0以上,风格Theme设为空
建立空工程不自动生成Activity
values 文件夹 下的style.xml parent属性不再是Theme.AppCompat
给工程新建Class文件
包名用工程包名,继承类android.app.Activity 名字MainUnityActivity
在AndroidMainfest.xml中添加上此Activity配置
将工程clean后重新编译,在手机正常运行
依照之前步骤添加外包jar包 Unity中的classes.jar
修改MainUnityActivity 继承UnityPlayerActivity添加OnCreate函数(不要添加setContentView接口)
在eclipse下build工程,然后导处此工程jar包,提供给unity(继承后是不能运行的,需搬运到unity再编译)
拷贝到unity测试工程下
配置unity
编译错误
Errorbuilding Player: CommandInvokationFailure: Unable to convert classes into dexformat. See the Console for details.
C:\ProgramFiles\Java\jdk1.7.0_51\bin\java.exe -Xmx2048M-Dcom.android.sdkmanager.toolsdir="D:/adt_studio20150817/sdk\tools"-Dfile.encoding=UTF8 -jar"E:/unity3d/Unity/Editor/Data/BuildTargetTools/AndroidPlayer\sdktools.jar"-
stderr[
Uncaughttranslation error: java.lang.IllegalArgumentException: already added:Lcom/arvr/ar/arworldunity/R$attr;
Uncaughttranslation error: java.lang.IllegalArgumentException: already added:Lcom/arvr/ar/arworldunity/R$drawable;
Uncaughttranslation error: java.lang.IllegalArgumentException: already added:Lcom/arvr/ar/arworldunity/R$string;
Uncaughttranslation error: java.lang.IllegalArgumentException: already added:Lcom/arvr/ar/arworldunity/R$style;
Uncaughttranslation error: java.lang.IllegalArgumentException: already added:Lcom/arvr/ar/arworldunity/R;
5errors; aborting
用WinRAR打开应用jar包,删除com目录下冲突的class
重新导入unity,编译到android,运行成功
横屏闪退,修改Unity android 横屏设置,重新编译运行后修护问题
http://tieba.baidu.com/p/3440479571
http://www.ceeger.com/Manual/PluginsForAndroid.html