1. 添加Unity的classes.jar文件

创建一个Android工程AndroidUnityDemo。

由于Unity的版本不同,直接在Unity安装包文件夹里面搜索classes.jar文件,如果有多个classes.jar文件,一般选择的是mono/Release文件夹下的classes.jar文件。

将classes.jar文件放在app文件下的libs文件夹下。

然后,更新一下。

2. 编写Android类

打开MainActivity.java类,让MainActivity类继承于UnityPlayerActivity类,如果提示类不存在,说明unity的classe.jar文件没有加载进来。

删除setContentView(R.layout.activity_main);

MainActivity.java

1packagecom.xxxxxx.androidunitydemo;23importandroid.os.Bundle;4importandroid.util.Log;56importcom.unity3d.player.UnityPlayerActivity;7publicclassMainActivityextendsUnityPlayerActivity{8@Override9protectedvoidonCreate(BundlesavedInstanceState){10super.onCreate(savedInstanceState);11}12publicvoidtest1()13{14Log.v("Android_Unity","noreturnvalueandnoparameter");15}16publicStringtest2()17{18Log.v("Android_Unity","havereturnvalueandnoparameter");19return"HelloUnity";20}21publicvoidtest3(Stringpar)22{23Log.v("Android_Unity","noreturnvalueandhaveparameter");24Log.v("Android_Unity",par);25}26publicStringtest4(Stringpar)27{28Log.v("Android_Unity","havereturnvalueandhaveparameter");29Log.v("Android_Unity",par);30return"HelloUnity";31}32publicstaticvoidtest5()33{34Log.v("Android_Unity","staticfunction");35}36}

3. 打包成arr文件

打开build.gradle文件,将applyplugin:‘com.android.application’修改为applyplugin:‘com.android.library’,将applicationId‘com.XXXXXX.androidunitydemo’删除。

Build.gradle

1applyplugin:'com.android.library'2android{3compileSdkVersion234buildToolsVersion"23.0.3"5defaultConfig{6minSdkVersion157targetSdkVersion238versionCode19versionName"1.0"10}11buildTypes{12release{13minifyEnabledfalse14proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'15}16}17}18dependencies{19compilefileTree(dir:'libs',include:['*.jar'])20testCompile'junit:junit:4.12'21compile'com.android.support:appcompat-v7:23.4.0'22}

如果不用在Unity中添加Android的res文件的话,将AndroidManifest文件中使用res的部分删除。修改AndroidManifest.xml文件,加入android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">与<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

AndriodManifest.xml

<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.xxxxxx.androidunitydemo"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="15"android:targetSdkVersion="23"/><applicationandroid:allowBackup="true"android:label="AndroidUnityDemo"android:supportsRtl="true"><activityandroid:name="com.xxxxxx.androidunitydemo.MainActivity"android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter><meta-dataandroid:name="unityplayer.UnityActivity"android:value="true"/></activity></application></manifest>

打包文件,点击Build->BuildApk,点击ShowinExplorer,打开arr文件所在文件夹,点击outputs->arr,就可以看到app-debug.arr压缩包。

4. 创建一个简单场景

创建一个Unity项目名为UnityAndroidDemo。

点击File->Build Setting,点击Android,在点击Switch platform按钮,进行平台转换,点击Player Settings,在Inspector会看到具体内容,点击Other Settings,找到Identification中的Bundle Identifier,将其内容修改成Adnroid的packageName,也就是AndroidManifext.xml文件中package的值。

点击File->Save Scene,保存场景。

5. 将AndroidManifest.xml与arr文件加入到Unity项目中

在Project里创建文件夹Plugins,在文件夹Plugins文件夹里创建文件夹Android,将app-debug.arr文件解压,将其中的classes.jar文件与AndroidManifest.xml文件取出来放入Unity的Android文件夹下。

6. 调用Android类

打开Main Camera,点击Add Component->New Script,创建一个c#文件,点击Create and Add。

打开NewBehaviourScript.cs文件,进行编写。

1usingUnityEngine;2usingSystem.Collections;34publicclassNewBehaviourScript:MonoBehaviour{5//Usethisforinitialization6voidStart(){7}8//Updateiscalledonceperframe9voidUpdate(){10if(Input.GetKey(KeyCode.Escape))11Application.Quit();12}13voidOnGUI()14{15if(GUILayout.Button("NoReturnValueAndNoParameter"))16{17AndroidJavaClassjc=newAndroidJavaClass("com.unity3d.player.UnityPlayer");18AndroidJavaObjectjo=jc.GetStatic<AndroidJavaObject>("currentActivity");19jo.Call("test1");20}21if(GUILayout.Button("HaveReturnValueAndNoParameter"))22{23AndroidJavaClassjc=newAndroidJavaClass("com.unity3d.player.UnityPlayer");24AndroidJavaObjectjo=jc.GetStatic<AndroidJavaObject>("currentActivity");25stringreturnValue=jo.Call<string>("test2");26Debug.Log("HaveReturnValueAndNoParameterReturnValue:"+returnValue);27}28if(GUILayout.Button("NoReturnValueAndHaveParameter"))29{30AndroidJavaClassjc=newAndroidJavaClass("com.unity3d.player.UnityPlayer");31AndroidJavaObjectjo=jc.GetStatic<AndroidJavaObject>("currentActivity");32jo.Call("test3","HelloAndroid");33}34if(GUILayout.Button("HaveReturnValueAndHaveParameter"))35{36AndroidJavaClassjc=newAndroidJavaClass("com.unity3d.player.UnityPlayer");37AndroidJavaObjectjo=jc.GetStatic<AndroidJavaObject>("currentActivity");38stringreturnValue=jo.Call<string>("test4","HelloAndroid");39Debug.Log("HaveReturnValueAndHaveParameterReturnValue:"+returnValue);40}41if(GUILayout.Button("staticFunction"))42{43AndroidJavaClassjc=newAndroidJavaClass("com.unity3d.player.UnityPlayer");44AndroidJavaObjectjo=jc.GetStatic<AndroidJavaObject>("currentActivity");45jo.CallStatic("test5");46}47}48}

7. 运行结果显示