如何進行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複選框 -&> Export2. AS打開導出的工程
首先隨便打開一個AS工程,然後FIle -&> New -&> Import Project -&> 選剛才導出來的工程 -&> 等待Gradle -&> 以此工程為基礎繼續開發Android代碼
3. Android 調用 Unity 腳本中的方法
這裡首先對Unity腳本進行一點說明,以C#為例:
在OnStart()裡面要寫入this.name = "A"
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&
jc.Call("onCall","String")
即可調用onCall方法.
2種方案,1將unity項目導出安卓項目。2將安卓項目導出jar包的形式給unity用!具體請百度,谷歌,一大把教程。sharesdk也有針對unity的工程包,很方便試用,您可以去看看
推薦閱讀:
※為什麼Unity3D能夠產生如此多的插件(中間件)?
※Unity3d,UDK 和 CE3 三者之間各有什麼優缺點?如何選擇?
※unity5.X的場景烘培速度慢到令人髮指是什麼原因?有什麼提高速度的優化方案?
※Unity3d 拖拽賦值組件與通過Find賦值組件的優點與缺點?