Unity中已嵌入Android的SDK,Unity可以很方便的和Android实现相互调用,对于第三方的SDK,只提供了与安卓交互,因此需要通过AndroidStudio与Unity进行交互;
扩展AndriodStudio中的Activity
使用AndroidStudio创建Android Library库工程,导出到Unity中作为插件使用;库文件中可以有自己的逻辑和调用;
一,在Unity中使用Android的方法
需要使用到AndroidJavaClass类和AndroidJavaObject类
AndroidJavaObject类的一常用方法:
方法 | 描述 |
Call | 调用Android代码中的非静态方法 |
CallStatic | 调用Android代码中的静态方法 |
Get | 获取Android代码中的非静态字段 |
GetStatic | 获得Android代码中的静态字段 |
Set | 设置Android代码中的非静态字段 |
SetStatic | 设置Android代码中的静态字段 |
二,在AndroidStudio中调用Unity的方法
使用UnityPlayer.SendMessage方法,参数描述如下:
- A:挂在哪个物体上
- B:哪个方法
- C:方法的参数
三,导出文件的描述
- jar文件:包含有自己写的逻辑的类
- xml文件:清单文件(签名,图标,安装文件名等)
- res文件:清单文件中需要的一些资源
- 还有一些更高级扩展的依赖文件
注意:XML文件里会包含一些包名设置,图标等等,会和Unity中的PlayerSetting里面的设置冲突,当有xml存在时,会使用xml中的设置;
第一步:AndroidStudio创建工程,设置并导出aar包
- ①:创建一个空的AndroidStudio工程
- ②:添加Android Libary
步骤:切换到Project视图 ⇒ 右键 ⇒ New ⇒ Module ⇒ Android Libary ⇒ 命名 - ③:导入Unity中Android支持的.jar包(classes.jar)
文件地址:Unity安装目录\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar - ④:导入UnityPlayerActivity.java文件到java/com.unity3d.player文件夹下
- ⑤:添加MainActivity,继承自UnityPlayerActivity
- ⑥:右键将classes.jar文件设置为Libary
步骤:右键点击classes.jar文件 ⇒ Add as Libary - ⑦:切换到Android视图下将默认的AndroidMainfest.xml的Applaction内容复制到刚才创建的项目中的AndroidMainfest.xml中替换掉,报红就删掉
- 修改Android:label = "AppName",会覆盖Unity中设置的程序名
- 在***</intent-filter>的最外层添加<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
- ⑧:导出aar包
步骤:选中该项目 ⇒ 点击导航栏Bulid ⇒ Make Module - ⑨:找到Debug目录下的Build\outputs\aar.aar的压缩文件,将该文件使用压缩文件打开,删掉Libs下面的classes.jar文件删掉,将aar里面的xml文件,删掉一些通用设置,比如显示图标和App名称
- ⑩:拷贝出项目文件\buid\intermediates\merged_manifests\debug\processDebugMainfest\Merged\AndroidMainfest.xml
第二步:将导出的aar包导入Unity中使用
一,将导出的aar包和拷贝出的AndroidMainfest复制到Unity工程的Assets\Plugins\Android文件夹下
二,获取AndroidStudio中激活的Activity
private static AndroidJavaClass unityPlayer;
private AndroidJavaObject curActivity;
private void Awake()
{
unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
curActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
}