Unity調用Android類方法


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.  運行結果顯示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM