简单说就是 1.先编写Android 项目 其中要引入 unity的接口文件,让他们可以互相调用。
2.Android 项目中 主的activity 它是在AndroidManifest.xml中配置的。它需要继承UnityPlayerActivity 这样unity一启动就会调起这个Activity
3.然后出jar包 导入到unity项目的中的plugin文件夹
4。 unity中用AndroidJavaClass 来直接调用Android的接口。
Unity与Android交互有多种方式,使用AndroidJavaClass和AndroidJavaObject是最为方便的方式,这里只介绍此种方式
一般的 用法 也主要是Unity掉Android 所有基本够用
Unity程序
- 正常创建Unity工程
- 在Unity目录里创建如下Plugins目录结构,并将建立好的jar文件导入到unity中,如使用到android中的资源文件,要把相关资源文件也拷贝的对应的目录下。(manifest文件一定要拷贝过来。)
public static AndroidJavaClass mBluetooth;
public static AndroidJavaObject mContext;
mBluetooth = new AndroidJavaClass("com.wangwang.test.mActivity");
using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
mContext = cls_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); //获取Android工程中继承UnityPlayer的类的实例
}
- AndroidJavaClass可以用来调用静态方法,AndroidJavaObject可以用来调用非静态方法,例如:
//调用获取到的实例中的方法。java中返回的参数类型用泛型来表示,第一个参数为java中对应的方法名,后面的参数为要传入该java方法的参数。
mContext.Call<bool>("changeServiceState","test");
mBluetooth.CallStatic<bool>("showToast",str , time); //调用类中的静态方法
最佳实践
- 使用using方法可以减少一些不必要的内内存开销,如:
//cls_UnityPlayer 在使用后会被销毁
using (AndroidJavaClass cls_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
mContext = cls_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
}
java中继承UnityPlayer的类中需要Content的地方最好都使用UnityPlayer.currentActivity,不然可能会出现莫名其妙的错误
Unity中的android相关的配置 Bundle Identifier* 可能需要该为java中项目对应的包名。
其实还可以Android调用起Unity的项目 类似现在的各种VR实现。之间贴文章
https://www.jianshu.com/p/60d5b9c1b400
https://www.imooc.com/article/68624
http://www.xuanyusong.com/archives/667
Android 里Mainfast.xml 是非常重要的文件,他在程序开始运行时 便调用。
里面声明了程序会用到的所有Activity(一个界面就是一个Activity,原生程序不同的界面切换其实是不同的activity)
unity程序是一个整体的Activity就只有一个Activity 切记要声明里面有lunach、icon、application等等
**AndroidManifest:里面还记录着应用程序的权限,Service啊什么的**
还有各种需要调用的SDK 。
还有一些必要的声明文件
Unity在接渠道的时候要注意包名
在Java写完之后,
每次打包时要确保你的AndroidMainfest 是最新的。
每次打包的时候Unity会用它默认的AndroidManifest,它默认的AndroidManifest在 unity.app/Contents/PlaybackEngines/AndroidPlayer下面。当你在进行打包apk的时候 unity会拷贝该路径下的所有参数。
在ProjectSetting里面勾选一些权限的时候,Unity会自动帮你修改AndroidManifest里面的权限,但是如果某个权限不能在Unity工程里面修改,那么就需要自己手动替换。如下图所示,我们把AndroidManifest放在Plugins/Android下面, 这样Unity在进行打包的时候就不会用它默认的,而是用我自己新写的打包。。这样就方便灵活很多了。。
bin:下面就记录着sdk用到的第三方jar
res:下面就是安卓的一些图片,资源啊什么。
在java程序中 导出时需要选择 src 和gen文件下的内容 别的可以不选 但是libs如果有调用别的sdk需要打包进去。但是一定要选择classPath 和project 里面保存的索引路径。
在打包时应该注意 包名 com.xx.xx.xx 和Defines平台的声明 和服务器的声明
雨凇的这篇帖子可以看一下http://www.xuanyusong.com/archives/2748
http://www.cnblogs.com/wanqieddy/p/4447594.html
[http://blog.csdn.net/bigconvience/article/details/30063995](http://blog.csdn.net/bigconvience/article/details/30063995)