Unity调用Android类方法
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. 运行结果显示 本文转自xmgdc51CTO博客,原文链接:http://blog.51cto.com/12953214/1940451 ,如需转载请自行联系原作者