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
登录后复制
1 package com.xxxxxx.androidunitydemo;
2
3 import android.os.Bundle;
4 import android.util.Log;
5
6 import com.unity3d.player.UnityPlayerActivity;
7 public class MainActivity extends UnityPlayerActivity {
8 @Override
9 protected void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 }
12 public void test1()
13 {
14 Log.v("Android_Unity", "no return value and no parameter");
15 }
16 public String test2()
17 {
18 Log.v("Android_Unity","have return value and no parameter");
19 return "Hello Unity";
20 }
21 public void test3(String par)
22 {
23 Log.v("Android_Unity","no return value and have parameter");
24 Log.v("Android_Unity",par);
25 }
26 public String test4(String par)
27 {
28 Log.v("Android_Unity","have return value and have parameter");
29 Log.v("Android_Unity",par);
30 return "Hello Unity";
31 }
32 public static void test5()
33 {
34 Log.v("Android_Unity", "static function");
35 }
36 }
3. 打包成arr文件
打开build.gradle文件,将apply plugin: ‘com.android.application’修改为apply plugin: ‘com.android.library’,将applicationId ‘com.XXXXXX.androidunitydemo’删除。
Build.gradle
登录后复制
1 apply plugin: 'com.android.library'
2 android {
3 compileSdkVersion 23
4 buildToolsVersion "23.0.3"
5 defaultConfig {
6 minSdkVersion 15
7 targetSdkVersion 23
8 versionCode 1
9 versionName "1.0"
10 }
11 buildTypes {
12 release {
13 minifyEnabled false
14 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
15 }
16 }
17 }
18 dependencies {
19 compile fileTree(dir: 'libs', include: ['*.jar'])
20 testCompile 'junit:junit:4.12'
21 compile '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
登录后复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxxxxx.androidunitydemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="23" />
<application
android:allowBackup="true"
android:label="AndroidUnityDemo"
android:supportsRtl="true" >
<activity android:name="com.xxxxxx.androidunitydemo.MainActivity"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
打包文件,点击Build->Build Apk,点击Show in Explorer,打开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文件,进行编写。
登录后复制
1 using UnityEngine;
2 using System.Collections;
3
4 public class NewBehaviourScript : MonoBehaviour {
5 // Use this for initialization
6 void Start () {
7 }
8 // Update is called once per frame
9 void Update () {
10 if (Input.GetKey(KeyCode.Escape))
11 Application.Quit();
12 }
13 void OnGUI()
14 {
15 if (GUILayout.Button("NoReturnValueAndNoParameter"))
16 {
17 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
18 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
19 jo.Call("test1");
20 }
21 if (GUILayout.Button("HaveReturnValueAndNoParameter"))
22 {
23 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
24 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
25 string returnValue = jo.Call<string>("test2");
26 Debug.Log("Have Return Value And No Parameter Return Value : " + returnValue);
27 }
28 if (GUILayout.Button("NoReturnValueAndHaveParameter"))
29 {
30 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
31 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
32 jo.Call("test3","Hello Android");
33 }
34 if (GUILayout.Button("HaveReturnValueAndHaveParameter"))
35 {
36 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
37 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
38 string returnValue = jo.Call<string>("test4","Hello Android");
39 Debug.Log("Have Return Value And Have Parameter Return Value : " + returnValue);
40 }
41 if (GUILayout.Button("staticFunction"))
42 {
43 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
44 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
45 jo.CallStatic("test5");
46 }
47 }
48 }
7. 运行结果显示
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删