Unity3D之移植學習筆記:移植到Android平台

來源:互聯網
上載者:User

標籤:

首先,我們需要一台已經配置好可以開發Android應用的電腦,這裡我使用的是Windows系統+Eclipse+ADT的開發環境,當然也可以使用Android Studio或者使用Mac系統都可以。

匯出到Eclipse設定U3D工程

首先需要設定遊戲的平台為Android:

在Player Settings...面板中記得設定一下:

這個名稱需要設定。

匯出Android工程

設定好Android的配置之後,我們需要對Android工程進行匯出,我們仍然點擊Builder Setting,勾選匯出工程:

我們將工程匯出到指定的檔案夾中,注意我們在匯出過程中需要選擇Android SDK和JDK的路徑。

匯入工程

我們開啟Eclipse匯入當前的工程:

需要注意的是,如果我們當前的Workspace和匯出的檔案夾一致則會報錯“Invalid project description”,解決的辦法是,我們匯出的檔案夾和Workspace的檔案夾不一致即可,如下:

如上,我的匯出路徑是AndroidOutput檔案夾,而我的Eclipse的Workspace是Android檔案夾。

Unity與平台互動

在Android這邊,我們要修改的是UnityPlayerNativeActivity.java檔案:

Android調用Unity的方法

可以直接使用靜態方法:

UnityPlayer.UnitySendMessage(String arg0, String arg1, String arg2);

我們看看他的3個參數:

  1. 第一個參數:位於情境中的GameObject的名稱。
  2. 第二個參數:調用該GameObject身上存在的方法名稱。
  3. 第三個參數:傳遞的參數,這裡只能使用字串類型。

比如:我們情境中存在一個名為“AndroidInterface”的GameObject,同時為其綁定了一個指令碼,指令碼中存在一個名為“AndroidCallback”的方法,那麼我們在Android平台上要調用該方法就可以使用下面的代碼:

UnityPlayer.UnitySendMessage("AndroidInterface", "AndroidCallback", "");

有意思的是,Unity中的方法的存取權限不一定要是public的,使用protected及private都可以被調用到。

Unity調用Android的方法

Unity調用Android的方法首先要擷取到AndroidJavaObject對象,同時調用的方法必須在UnityPlayerNativeActivity類中定義,我們看看下面的指令碼:

 1 using System; 2 using UnityEngine; 3  4 /// <summary> 5 /// 和 Android 平台互動相關的指令碼. 6 /// </summary> 7 public class AndroidInterface : MonoBehaviour 8 { 9     private static AndroidInterface _instance;10 11     public static AndroidInterface GetInstance()12     {13         if(_instance == null)14         {15             throw new Exception("AndroidInterface is not initialized!");16         }17         return _instance;18     }19 20     private AndroidJavaObject _activity;21 22     void Awake()23     {24         if(_instance != null)25         {26             throw new Exception("GameDebug is Singleton!");27         }28         _instance = this;29 30         AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");31         _activity = javaClass.GetStatic<AndroidJavaObject>("CurrentActivity");32     }33 34     /// <summary>35     /// 彈出詢問是否退出的對話方塊.36     /// </summary>37     public void ShowQuitDialog()38     {39         _activity.Call("showQuitDialog");40     }41 42     /// <summary>43     /// 彈出對話方塊.44     /// </summary>45     /// <param name="title">標題.</param>46     /// <param name="content">內容.</param>47     public void ShowDialog(string title, string content)48     {49         _activity.Call("showDialog", new string[]{title, content});50     }51 }

我們通過如下調用即可調用到UnityPlayerNativeActivity類中對應名稱的方法了:

AndroidInterface.GetInstance().ShowQuitDialog();

同時,Java方面的方法也可以是protected和private的存取權限,同時傳遞的參數無限制。

偵錯工具

(註:我這邊使用模擬器運行時會報EGL_emulation的錯誤,調試實際上是不成功的,但是發布後是可以正常啟動並執行。)

選擇“Run”-》“Run”即可。

發布安裝包

由於已經作為Android工程所以不能再使用Unity3D來發布了,但是發布比較簡單:

選擇工程點擊右鍵,“Android Tools”-》“Export Signal Application Package”即可,需要我們使用一個Keystore,沒有進行建立即可。

問題總結

匯入Android項目失敗:http://www.crifan.com/adt_android_invalid_project_description_overlaps_the_location_of_another_project/

Android模擬器啟動報錯:http://blog.csdn.net/yu413854285/article/details/7559333

Installation error: INSTALL_FAILED_CONTAINER_ERROR:http://www.cnblogs.com/lovecode/articles/3658211.html

Unity3D之移植學習筆記:移植到Android平台

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.