unity開發(fā)之a(chǎn)ndroid與unity跨平臺(tái)開發(fā)

前言

在android開發(fā)中钢悲,我們可能希望在現(xiàn)有的android項(xiàng)目中添加對(duì)unity的支持焕阿,以實(shí)現(xiàn)app擁有AR/VR屯烦,3D交互坷随,2D游戲等unity的功能。以下將介紹如何實(shí)現(xiàn)該具體過程驻龟。

正文

本文基于Unity-Technologies/uaal-example項(xiàng)目分析
https://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.md

該文檔介紹利用unity的Build Settings功能下的Export Project温眉,將一個(gè)unity project 導(dǎo)出為Android project, 該Android project目錄下包括了unityLibrary module ,我們只需要按照Android項(xiàng)目如何添加一個(gè)現(xiàn)有module項(xiàng)目到當(dāng)前工程目錄的方式翁狐,最終實(shí)現(xiàn)整合unity工程到我們的項(xiàng)目类溢。

完成后項(xiàng)目目錄如下:

clipboard.png

接下來我們?cè)赼ndroid項(xiàng)目中編譯運(yùn)行該app,unity端為獨(dú)立進(jìn)程露懒,見下圖:

06e4e1652b78f1b5a3e14676f3cf418.png

閱讀該項(xiàng)目源碼闯冷,發(fā)現(xiàn)android端和unity端的雙端通信方式如下:

android端至unity端:

UnitySendMessage,這是方法我們至少需要傳入兩個(gè)參數(shù)懈词,第一個(gè)參數(shù)為unity中的一個(gè)gameobject名稱蛇耀,第二個(gè)參數(shù)為這個(gè)gameobject身上捆綁的腳本中的一個(gè)方法,而第三參數(shù)事實(shí)上是這個(gè)對(duì)應(yīng)方法上的參數(shù)坎弯。

例子:

mUnityPlayer.UnitySendMessage("Cube", "ChangeColor", "yellow");  

unity端至android端:

通過反射機(jī)制纺涤,創(chuàng)建AndroidJavaClass 和AndroidJavaObject實(shí)例調(diào)用android端對(duì)應(yīng)接口。

例子:

#if UNITY_ANDROID
            try
            {
                AndroidJavaClass jc = new AndroidJavaClass("com.company.product.OverrideUnityActivity");
                AndroidJavaObject overrideActivity = jc.GetStatic<AndroidJavaObject>("instance");
                overrideActivity.Call("showMainActivity", lastStringColor);
            } catch(Exception e)
            {
                appendToText("Exception during showHostMainWindow");
                appendToText(e.Message);
            }
    #elif UNITY_IOS || UNITY_TVOS
            NativeAPI.showHostMainWindow(lastStringColor);
    #endif

完整閱讀項(xiàng)目源碼抠忘,生成如下類圖:

1111.png

類圖中unity核心類是UnityPlayerActivity撩炊,andriod app通過啟動(dòng)UnityPlayerActivity進(jìn)入untiy世界。

該類源碼文件位于unity程序安裝目錄下Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player
導(dǎo)出到android項(xiàng)目目錄位于:


20200422162459.png

UnityPlayerActivity的核心成員變量是UnityPlayer, 該類源代碼無法查看具體實(shí)現(xiàn)褐桌,但是通過查看UnityPlayer.class文件衰抑,我們大致可以了解:

  1. 該類繼成自FrameLayout,

  2. 類成員變量主要包括:

  • Context mContext, context相關(guān)接口

  • SurfaceView類mGlView荧嵌,用于展現(xiàn)UI

  • NetworkConnectivity類m_NetworkConnectivity 呛踊,監(jiān)聽網(wǎng)絡(luò)變化,

  • AudioVolumeHandler 控制音量啦撮,

  • Camera2Wrapper m_Camera2Wrapper 相機(jī)相關(guān)控制

  • TelephonyManager m_TelephonyManager 網(wǎng)絡(luò)相關(guān)控制

接著查看unity工程目錄下的OverrideUnityActivity谭网,從目錄可以分析Android,iOS等多端平臺(tái)相關(guān)內(nèi)容都在Assets\Plugins下

222.png

在Android目錄下添加一個(gè)android aar文件,重新Export Project到Android 工程下赃春,查看build.grandle(Module:unityLibrary), 已自動(dòng)添加了該aar文件的依賴愉择。

總結(jié):

通過學(xué)習(xí)uaal-example源碼,我們知道了

  • Android進(jìn)入U(xiǎn)nity世界的橋梁UnityPlayerActivity和UnityPlayer,
  • android和unity的通信接口 UnitySendMessage锥涕, 反射方式創(chuàng)建AndroidJavaClass和AndroidJavaObject
  • Android和unity多工程跨平臺(tái)項(xiàng)目開發(fā)方式Export Project衷戈,iOS端與此類似,本文不再贅述层坠。

參考:

https://docs.unity3d.com/Manual/UnityasaLibrary-Android.html

https://github.com/Unity-Technologies/uaal-example/blob/master/docs/android.md

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末殖妇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子破花,更是在濱河造成了極大的恐慌谦趣,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件座每,死亡現(xiàn)場(chǎng)離奇詭異前鹅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)峭梳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門舰绘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人延赌,你說我怎么就攤上這事除盏〔娉鳎” “怎么了挫以?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窃祝。 經(jīng)常有香客問我掐松,道長,這世上最難降的妖魔是什么粪小? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任大磺,我火速辦了婚禮,結(jié)果婚禮上探膊,老公的妹妹穿的比我還像新娘杠愧。我一直安慰自己,他們只是感情好逞壁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布流济。 她就那樣靜靜地躺著,像睡著了一般腌闯。 火紅的嫁衣襯著肌膚如雪绳瘟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天姿骏,我揣著相機(jī)與錄音糖声,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蘸泻,可吹牛的內(nèi)容都是我干的琉苇。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼悦施,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼翁潘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歼争,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤拜马,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后沐绒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俩莽,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年乔遮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了扮超。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蹋肮,死狀恐怖出刷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坯辩,我是刑警寧澤馁龟,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站漆魔,受9級(jí)特大地震影響坷檩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜改抡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一矢炼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阿纤,春花似錦句灌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至清蚀,卻和暖如春匕荸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背枷邪。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工榛搔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诺凡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓践惑,卻偏偏與公主長得像腹泌,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尔觉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容