介於網上看過不少unity和Android交互的教程,都或多或少的漏掉了一些部分,致使編譯過程當中出現各類問題,特此整理一份教程,僅供參考java
本次實現的是在遊戲界面下方顯示一個banner廣告,而後控制顯示和隱藏的功能
Android和unity之間的交互從代碼上來看其實很簡單
unity調用安卓的代碼是:android
// 加載unity的交互對象,照着寫就是了,沒有變化 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); // 調用Android中寫好的public函數 // 能夠傳參數,參數類型是params[],因此~~~ // 像這樣就能夠了 jo.Call("u3dCallHideBanner",參數1,參數2,參數3); jo.Call("u3dCallHideBanner");
Android調用unity的代碼是:app
// 第一個參數是unity中的對象名字,記住是對象名字,不是腳本類名 // 第二個參數是函數名 // 第三個參數是傳給函數的參數,目前只看到一個參數,而且是string的,本身傳進去轉吧 UnityPlayer.UnitySendMessage("UI_ROOT","onMsgFromAndroid",msg);
下面的步驟就是機械化的了,就不解釋咯~~~雖然上面也沒啥解釋eclipse
PS:建議選2.3.3以上的Android版本ide
先在unity的安裝目錄下找到一個classes.jar文件
個人路徑是"D:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin"
各位自行類比 ABCDEFG~~~~
而後將這個文件複製到Android工程下的libs文件中,複製進去就行了,eclipse會自動添加到buildpath的
就是框框裏那個東東,我改了個名字而已
而後將主Activity改爲須要的樣子函數
public class MainActivity extends UnityPlayerActivity { private Activity activity = this; // must be an Activity WFSUtils wfsUtils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wfsUtils = WFSUtils.getInstance(activity); // 添加gameview FrameLayout gameLayout = (FrameLayout) findViewById(R.id.fl_game); gameLayout.addView(this.a); // 添加banner FrameLayout bannerWrapper = (FrameLayout) findViewById(R.id.fl_ad); bannerWrapper.addView(wfsUtils.getBannerView()); this.a.requestFocus(); } public void u3dCallShowBanner() { wfsUtils.showBanner(); sendMessageToUnity("響應了顯示Banner"); } private void sendMessageToUnity(String msg) { // 第一個參數是unity中的對象名字,記住是對象名字,不是腳本類名 // 第二個參數是函數名 // 第三個參數是傳給函數的參數,目前只看到一個參數,而且是string的,本身傳進去轉吧 UnityPlayer.UnitySendMessage("UI_ROOT","onMsgFromAndroid",msg); } }
記住,繼承的是UnityPlayerActivity,是UnityPlayerActivity,是UnityPlayerActivity,重要的事說三遍~~~
而後佈局能夠本身改,個人是像這樣的佈局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/base" android:layout_width="match_parent" android:layout_height="match_parent" android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" tools:context="${relativePackage}.${activityClass}" > <FrameLayout android:id="@+id/fl_game" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFF" > </FrameLayout> <FrameLayout android:id="@+id/fl_ad" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" > </FrameLayout> </RelativeLayout>
其實很簡單,上面放咱們的GameView,下面放個banner廣告....
而後各類資源文件擺好,下面開始打包
只選src,無論你有不有調用第三方庫,都直選src,其餘教程木有這個
只選src,無論你有不有調用第三方庫,都直選src,其餘教程木有這個
只選src,無論你有不有調用第三方庫,都直選src,其餘教程木有這個
而後就打包出jar包了,繼續下一步ui
在unity中建立以下幾個目錄
不要問能不能改。。。不能改!!! unity官方手冊上有說
而後剛纔打包出來的jar包複製到bin目錄下
Android中libs文件夾下全部文件複製到libs文件夾
Android中res文件夾下全部文件複製到res文件夾
而後~~~~
重點來了,刪掉unity本身的classes.jar文件,就是個人這個u3dlibs.jar,別的教程沒有
重點來了,刪掉unity本身的classes.jar文件,就是個人這個u3dlibs.jar,別的教程沒有
重點來了,刪掉unity本身的classes.jar文件,就是個人這個u3dlibs.jar,別的教程沒有
像這樣:
如今你能夠嘗試build一下項目,看是否報錯,若是報錯,請重複前面幾個步驟,or Google一下this
代碼超級簡單,像這樣:debug
public void showBanner() { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("u3dCallShowBanner"); } public void hideBanner() { debugUI.onMsg("[u3d]u3dCallHideBanner"); // 加載unity的交互對象,照着寫就是了,沒有變化 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); // 調用Android中寫好的public函數 // 能夠傳參數,參數類型是params[],因此~~~ // 像這樣就能夠了 jo.Call("u3dCallHideBanner",參數1,參數2,參數3); jo.Call("u3dCallHideBanner"); } void onMsgFromAndroid(string str) { debugUI.onMsg("[Fr:Android]" + str); }
而後unity基本事件響應我就不解釋了 若是你看到這裏都還編譯不過,聯繫我QQ 821580467吧~~~