Android 與 Unity 交互一

前言

前段時間幫 Unity 遊戲組的同事接支付功能,用到 Unity 與 Android 的交互。這篇文章就來總結一下。

交互方式

Android 與 Unity 的交互有兩種方式:Android 作爲 Unity 的一部分或者把 Unity 作爲 Android 的一部分。至於使用哪種方式,就要根據具體情況來決定了。

如果你的項目是以 Unity 爲主( Unity 的部分需要經常改動,而 Android 的部分比較固定),就把 Android 作爲 Unity 的一部分來實現交互。

如果你的項目是以 Android 爲主( Android 的部分需要經常改動, Unity 部分比較固定),這時就把 Unity 作爲 Android 的插件來使用。

Android 作爲 Unity 的一部分

使用這種方法時我們需要使用 Unity 爲 Android 提供的一個叫做 classes.jar 的庫。首先,我們要在 Unity 的安裝路徑下找到這個庫。由於 Unity 版本的不同這個庫所在的路徑會有不同,筆者這裏提供一個大致的位置 /Unity 的安裝目錄/PlaybackEngines/AndroidPlayer/Variations/il2cpp/Release/Classes/classes.jar。這個路徑是 Mac 下的,Unity 的版本是 5.3.5 f1 Personal。

新建 Android 項目

在 Eclipse 中新建一個 Android 項目。然後把上述 classes.jar 作爲外部的庫導入項目中。如下圖:

addlibs

繼承 UnityPlayerActivity

MainActivity 繼承 UnityPlayerActivity。

    public class MainActivity extends UnityPlayerActivity {

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          //顯示 Unity 內容
          setContentView(mUnityPlayer);
          mUnityPlayer.requestLayout();
      }

      public void onClick(View v) {
          // 調用 Unity 的方法
          UnityPlayer.UnitySendMessage("Player", "ZoomIn", "");
      }

      // 被 Unity 調用的方法
      public String getName(String s) {
          return "TestUnity";
      }
    }

第 7 行,是將 Unity 的內容顯示到 Activity。注意:在 Unity 5.1 版本中 mUnityPlayer 變量名是 a。所以,如果你的 Unity 是 5.1 版本的,第 7 、 8 行應該換成 setContentView(a); a.requestLayout();

第 13 行,是 Android 調用 Unity 的方法。其中第一個參數是 Unity 組件的名字;第二個參數,被調用方法的方法名;第三個參數是被調用方法的實參。這個參數只能是 String 類型的。

導出 Android 包

把 Android 項目設置成 library。如下圖:

android

然後clean 項目並 build 。在項目的 bin 文件夾下會生成 .jar 的文件。如下圖:

libs

在桌面新建 Android 文件夾,在 Android 文件夾中,新建 bin 文件夾。
將項目裏 bin 下新生成的 jar 包,複製到新建的 Android 文件夾下的 bin 目錄下。如果 Android 項目有用到 aidl 也要將項目下 bin 裏的 aidl 文件夾複製到新建的 Android 文件夾下的 bin 目錄下。除此之外,把上圖中畫紅框的文件複製到新建的 Android 文件夾下。

設置 Unity

在 Assets 下新建 Plugins 包,將上述新建的 Android 文件夾拖拽到 Plugins 裏面。如下圖:

unity

添加代碼

    public class textOperate : MonoBehaviour {

      // Use this for initialization
      public Text text;
      void Start () {
        this.name = "Count Text";
        GetData ();
      }

      void GetData(){

        //調用 Android 的方法
        AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");

        string name = jo.Call<string> ("getName", "成功調用android方法");
        text.text = name;

      }
    }

第 13 行到第 16 行是 Unity 調用 Android 的代碼,其中第 16 行 jo.Call<string> ("getName", "成功調用android方法")的第一個參數是被調用方法的方法名,第二個參數是被調用方法的實參,這個參數是不定參數可以有多個。

打包 APK

點擊 File –> BuildSetting,如下圖:

u2

選中 Android ,點擊 Switch Platform ;然後點擊 Player Setting ,出現如下界面:

u3

將 Bundle Identifier 改爲 Android 的包名。點擊 Build 進行打包,如下圖:

u4

結語

這篇文章就先介紹到這裏。下篇文章介紹如何從 Unity 裏導出 Android 項目把 Unity 作爲 Android 的一部分來實現交互。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章