Unity5.0與Android交互


1. 目標

    1) Unity3D可調用Android Java函數(在.jar中)

    2) Java可調用Unity3D函數

    3) Unity3D可調用Android C函數(在.so中)

2. 測試環境

    1) Unity5.0

    2) JDK: jdk-8u25-windows-i586

    3) Android SDK

 

      4) Eclipse : adt-bundle-windows-x86中自帶的

3. 創建Java工程

    第一步

    

    第二步

    第三步

    第四步: Configure Laucher Icon,不做任何修改,不要把你的Image File在這兒加入,它會強行修改Image File的尺寸,在后面把它直接放入res/drawable即可。

     第五步

    

     第六步:Blank Activity采用默認值即可。

     第七步:刪除下面紅色標記部分

     注:若其基類不是Activity,則在左邊PlugInTest上點右鍵,然后選擇Properties,進入如下界面:

    

4. 修改Android工程

4.1 導入Unity5.0 classes.jar

      1) 其中定義了UnityPlayerActivity<它的基類是Activity>,其源碼位置:

      C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\com\unity3d\player)

      2) classes.jar位於:C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin,其導入方法如下圖所示:

      

4.2 替換Launcher Icon

      把自己制作的ic_launcher.png覆蓋res/drawable-xxx目錄中的ic_launcher.png    

4.3 修改MainActivity.java        

[java]  view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. package com.example.plugintest;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5.   
  6. import com.unity3d.player.UnityPlayerActivity;  
  7.   
  8. public class MainActivity extends UnityPlayerActivity {  
  9.   
  10.     @Override  
  11.     protected void onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.     }  
  14.   
  15.     // only for test, C# in unity will call it  
  16.     public int GetInt(){  
  17.         return 1000;  
  18.     }  
  19.   
  20. }  



4.4 把Android內容導出到Unity5.0

4.4.1 生成plugintest.jar

      1) 進入PlugInTest的Properties中,並勾選“Is Library”

      2) Project->Clean

      3) Project->Build Project

      4) 生成的plugintest.jar見bin目錄

4.4.2 把PlugInTest中內容放入Unity5.0

      把以下內容都於Unity Project的“Assets\Plugins\Android”目錄中。

      1)bin目錄下的plugintest.jar

      2)bin目錄下的AndroidManifest.xml (可根據需要增加其它的Activity或權限)

      3)  整個res目錄

      其結果在Unity Project如下圖:

    

5. 修改Unity工程

5.1 修改Android 【Player Settings】

 

5.2 訪問Java接口

[csharp]  view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class AndroidTest : MonoBehaviour {  
  5.   
  6.     // Use this for initialization  
  7.     void Start () {  
  8.   
  9.     }  
  10.       
  11.     // Update is called once per frame  
  12.     void Update () {  
  13.         AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  
  14.         AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");  
  15.         Debug.Log("*********JerryTest*********" + jo.Call<int>("GetInt"));      
  16.     }  
  17. }  

 

UnityEngine.AndroidJavaClass與java.lang.Class及其子類對應。

UnityEngine.AndroidJavaObject與java.lang.Object及其子類對應。

 

 

 

5.3 導出apk

      File->Build Run

      當導出apk時,可能遇到下面的問題:

 

         Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.

      需在AndroidManifest中增加一行:

[html]  view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <meta-data android:name="unityplayer.UnityActivity" android:value="true" />  


          全部AndroidManifest如下所示:

[html]  view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="cn.toltech.game.doubleboats"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.     <supports-screens  
  7.         android:smallScreens="true"  
  8.         android:normalScreens="true"  
  9.         android:largeScreens="true"  
  10.         android:xlargeScreens="true"  
  11.         android:anyDensity="true"/>  
  12.     <uses-sdk  
  13.         android:minSdkVersion="14"  
  14.         android:targetSdkVersion="21" />  
  15.   
  16.     <application  
  17.         android:allowBackup="true"  
  18.         android:icon="@drawable/ic_launcher"  
  19.         android:label="@string/app_name"  
  20.         android:theme="@android:style/Theme.NoTitleBar">  
  21.         <activity  
  22.             android:name="com.example.plguintest.MainActivity"  
  23.             android:label="@string/app_name" >  
  24.             <intent-filter>  
  25.                 <action android:name="android.intent.action.MAIN" />  
  26.   
  27.                 <category android:name="android.intent.category.LAUNCHER" />  
  28.             </intent-filter>  
  29.             <meta-data android:name="unityplayer.UnityActivity" android:value="true" />  
  30.         </activity>  
  31.     </application>  
  32.   
  33. </manifest>  

 

6. Android Native Plug

     對於Android平台(armv7,x86)的Native Plugin, lib*.so應放於以下目錄中:

     1) X86平台:     Assets/Plugins/Android/libs/x86/
     2) armv7平台:Assets/Plugins/Android/libs/armeabi-v7a/

 

 

參考:http://docs.unity3d.com/Manual/PluginsForAndroid.html   


免責聲明!

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



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