如何進行Unity3D與Android消息傳遞?

問題背景:

題主在開發一款Android設備上的應用,其中有一部分三維展示和操作的功能使用Unity3D實現.現在希望能夠在Android代碼和C#腳本間進行通信,大致的方法是什麼?

PS:

目前的開發模式是把Unity工程Export成Android Studio工程,在AS中加入其它的Android代碼,編譯運行.

因為應用中還使用了其它的第三方庫(ShareSDK等),把Android代碼打包到U3D中使用比較困難.


自我推薦

[Unity3D]Unity3D遊戲開發之Unity與Android交互調用研究

[Unity3D]Unity3D遊戲開發之在Android視圖中嵌入Unity視圖

[Unity3D]Unity3D遊戲開發之從Unity3D到Eclipse


前前後後研究了三四天,終於有個頭緒了.為了讓查閱相同問題的人來到這裡的時候不至於失望而走,我還是自己回答一下這個問題吧.

1.Unity工程導出為Android Studio工程

(我個人用的U3D版本是5.1.1,已經支持直接將Unity工程導出為AS工程了,以前的版本我不敢保證.)

首先你要寫好Unity工程裡面的腳本,包括你希望Android調用的方法和調用Android方法的方法,這個在下面會有詳細敘述;接下來導出AS工程,方法是:

File裡面的Build Settings -&> 平台選擇Android,在Player Setting裡面設置API版本和包名(包名很重要) -&> 點擊Build Setting中的Google Android Project複選框 -&> Export

2. AS打開導出的工程

首先隨便打開一個AS工程,然後FIle -&> New -&> Import Project -&> 選剛才導出來的工程 -&> 等待Gradle -&> 以此工程為基礎繼續開發Android代碼

3. Android 調用 Unity 腳本中的方法

這裡首先對Unity腳本進行一點說明,以C#為例:

在OnStart()裡面要寫入

this.name = "A"

某個你要調用的方法設置為public類型,名稱為B,參數為C

在一個Extend UnityPlayerActivity的Activity里,直接使用

UnityPlayer.UnitySendMessage("A","B","C");

就可以調用腳本中的方法了.

4.Unity腳本調用Android方法

首先你要知道的是,在Unity腳本里寫調用安卓方法的時候,這個方法還不需要存在,你也不需要把安卓的代碼壓成jar包放進Unity工程.

剛說過的導出工程時候的包名很重要,假設是com.zhihu.solare;再假設在工程被導入到AS後,你在這個包中編寫了MainActivity.class,其中包含方法onCall(String str).則你可以在Unity腳本中提前寫好:

AndroidJavaClass jc = new AndroidJavaCalss("com.zhihu.solare.MainActivity");
AndroidJavaObject jo=jc.GetStatic&("currentActivity");
jc.Call("onCall","String")

即可調用onCall方法.


2種方案,1將unity項目導出安卓項目。2將安卓項目導出jar包的形式給unity用!具體請百度,谷歌,一大把教程。sharesdk也有針對unity的工程包,很方便試用,您可以去看看


推薦閱讀:

為什麼Unity3D能夠產生如此多的插件(中間件)?
Unity3d,UDK 和 CE3 三者之間各有什麼優缺點?如何選擇?
unity5.X的場景烘培速度慢到令人髮指是什麼原因?有什麼提高速度的優化方案?
Unity3d 拖拽賦值組件與通過Find賦值組件的優點與缺點?

TAG:編程 | Android開發 | Unity遊戲引擎 |