給Unity的Android工程加上廣告程式碼(1)
從該連結吸取了一些知識 https://blog.csdn.net/crazy1235/article/details/46733221
今天我們來說一下,如何給Unity的Android工程加上非unity的廣告程式碼。
首先,你需要把Unity的程式碼匯出到Android的工程

注意要在加紅位置打勾
在匯出的過程中,有可能會匯出失敗,本人碰到過的原因是專案在匯出之前需要先進行build

如果上面的匯出不成功,請先build一個版本出來
匯出完成以後,會在你之前選擇的目錄出現一個和你在unity的Product Name處設定一樣的名字的資料夾。
這個時候,你需要用Android Studio去開啟那個資料夾(Android Studio 可以在 http://www.android-studio.org 處下載到,需要設定SDK,NDK等)

本人使用的是3.1.3版本
不同的版本可能在配置上面有些區別,請百度或者google,如還不能解決,歡迎交流
通過 Open an existing Android Studio project開啟剛才從Unity匯出的Android工程。

會提示Sync Gradle, 那就sync吧
這時我們開啟工程目錄的java資料夾可以看到

在這個檔案裡面,包含了所有unity的程式碼
開啟以後,程式碼如下

Activity在Android Project中的作用,我們可以理解為相當於Unity中的一個Scene. 上圖中1位置的mUnityPlayer,是unity在轉換到android的時候,給自己所有程式碼的一個打包狀態,他會把自己做成.so 和其他的一些資原始檔,最後留給Activity 一個可以訪問的物件。然後在Activity中圖2的程式碼,會把渲染的結果放入一個view,即( setContentView(mUnityPlayer) ) . 並且看下面的程式碼也可以發現,這個Activity會把其他事件也傳給mUnityPlayer.

看到這裡,本人的想法是,既然activity當前的view可以指定渲染mUnityPlayer的所有結果,那麼我們是不是可以在activity裡新增多個view,分別渲染廣告的程式碼和遊戲的程式碼呢?說幹就幹
做過Android專案的開發者肯定都知道,需要改變android工程專案的控制元件佈局和資料,需要看兩個地方,一個是AndroidManifest.xml檔案,另一個是res資料夾。
開啟AndroidManifest.xml的程式碼,我發現這個檔案和在unity中的結構基本相同

兩個Activity
其中的一個activity是百度的廣告外掛封裝到unity的,這也是我想研究如何在android工程新增程式碼的原因,那個外掛實在是不好用,響應也不是太好。另一個是unity本身定義的activity,並且android.intent.action.MAIN和android.intent.category.LAUNCHER,指定了他是最早被載入的.(注意不同的unity專案匯出的AndroidManifest.xml可能有所不同,上面的之所以包含一個百度的activity是因為我使用了百度的unity封裝外掛,如果沒有使用,響應的activity就不會有, 我建議第一次嘗試的時候,先使用乾淨的unity版本匯出,這樣就不會出現亂七八糟的外掛來影響除錯效果 )
那我們就嘗試在res裡面新增view吧

開啟Res,驚歎!!!這是什麼鬼?框架呢?
研究以後,我想明白了,unity把資源也都打包起來了,所以在res裡面看不到任何可以改動的有效資源。
我想到的解決方法是,通過android studio建立一個新的activity,並且這個activity繼承自UnityPlayerActivity,這樣我就可以在這個新的activity裡面,使用unity那邊的所有功能了,那咱們來試試看吧:)

專案位置右鍵,撥出選單
咱們在這裡新增一個空的Activity(來 自己的工程,咱們翻身做主人,想怎麼折騰就怎麼折騰,哈哈)

建立頁面
隨便起個名字就行,Package Name(包名) 和專案保持一致。
建立完成以後,先把MainActivity的繼承關係設定好

設定繼承關係
並且在RES檔案裡面,我們會發現,出現了layout,而且裡面出現了Activity_main.xml. 我們嘗試在裡面配置一些控制元件,用來給廣告和遊戲分別渲染,看看是否能成功。

他對應的程式碼如下

然後我們要修改AndroidManifest.xml裡面新增的activity的屬性

我們把原本屬於UnityPlayerActivity的Main和LAUNCHER賦值給了MainActivity,然後修改 MainActivity的程式碼如下

注意紅色部分的程式碼d
紅色框部分的程式碼就是把Unity渲染處的圖片新增到新的Activity的其中的u3d的view裡面去。出來的效果是這樣

可見遊戲的一部分被覆蓋了,我考慮可能是因為另外一個view,adlayout的存在,使得unity渲染的效果被裁剪了,因為我沒有把視窗改變的事件設定傳入,這時我們把UnityPlayerActivity中其他的一些事件響應函式放入MainActivity.

但是新增以後我發現,由於沒有設定unity中camera對window size的大小的變化,所以手機上看不到明顯的變化。後面有空再做調整,至少上面的圖得到了我們想要的效果,一個view渲染了unity的遊戲,下面我們需要在另一個view,渲染廣告模組。