1. 程式人生 > >Unity5 0與Android互動

Unity5 0與Android互動

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

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        

package com.example.plugintest;import android.app.Activity;import android.os.Bundle;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    // only for test, C# in unity will call it    public int GetInt(){     return 1000;    }}


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介面

using UnityEngine;using System.Collections;public class AndroidTest : MonoBehaviour// Use this for initialization void Start () { }  // Update is called once per frame void Update () {  AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");  Debug.Log("*********JerryTest*********" + jo.Call<int>("GetInt"));  }}


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中增加一行:

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

           全部AndroidManifest如下所示:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="cn.toltech.game.doubleboats"    android:versionCode="1"    android:versionName="1.0" >    <supports-screens        android:smallScreens="true"        android:normalScreens="true"        android:largeScreens="true"        android:xlargeScreens="true"        android:anyDensity="true"/>    <uses-sdk        android:minSdkVersion="14"        android:targetSdkVersion="21" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@android:style/Theme.NoTitleBar">        <activity            android:name="com.example.plguintest.MainActivity"            android:label="@string/app_name" >            <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>

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


           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述