先看下效果
你一定會說,然並卵!
沒錯,這里只是一個最簡單的例子,unity與android activity 互相傳參數。
玩過手游的都知道,在你要為你心愛的游戲角色准備花錢買鑽石,點擊購買的時候,會彈出一個風格可能和游戲完全不符的界面,沒錯,那就是渠道sdk的支付界面了。
比如:
其實,在游戲上線之前呢,要接大量的渠道SDK啦,渠道有大量的用戶,保證游戲有大量的導入量,用了用戶,你的游戲才有可能賺錢。所以呢,游戲研發和渠道呢,要談游戲分成,但是往往都是渠道占大頭,誰叫用戶至上。
游戲研發呢,自然不必為這個再分心力,這個渠道sdk的提供商會把它封裝好,只提供接口給我們調用,傳一些參數過去,就可以完成想要的操作了。至於這個sdk里面,怎么和服務器交互啦,界面搭的多好看啦,都是后話。因為最后還是要把結果參數傳回到unity里面。
廢話說了一大堆。
1.建一個Android項目。把Unity安裝目錄下面的classes.jar 導入到這個工程的buildpath里面。
2.unity里面點擊一個button,打開一個新的 activity。比如說充值,打開支付的頁面哦。或者點擊一個button,關閉一個activity。
那么就涉及到activity切換。
activity的切換->Intent的使用(activity的切換會用到intent)
要兩個activity之間做切換,那必須再建一activity咯
你可以自定義layout,怎么好看怎么弄,It is up to you !
layout:就是告訴android,我新建的activity要顯示什么控件,控件按照什么排列方式顯示的
記得改androidMainifest.xml ,把你剛加的activity加上。
androidMainifest.xml:就是描述android有幾個activity。
新建的這個activity,要繼承UnityPlayerActivity
//寫好Android里交互部分 public void test1() { //調Unity里Testjoe函數,把參數傳過去 UnityPlayer.UnitySendMessage("JOE", "Testjoe", "I am com android"); } public void test2(final String msg) { runOnUiThread(new Runnable() { public void run() { //跳出一個提示。 Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } }); } //切換到自定義的activity,Unity里面記得調用哦 public void ToMyActivity(View view) { Intent myIntent = new Intent(this,MyActivity.class); startActivity(myIntent); }
3.Unity里面的交互部分
using UnityEngine; using System.Collections; public class test1 : MonoBehaviour { string content = "unity"; //Android里會調這個函數 public void Testjoe(string s) { this.content = s; } void OnGUI() { if (GUILayout.Button("調用Android函數1:BackCallUnityMethod", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("test1"); } GUILayout.Box(this.content, GUILayout.Height(100), GUILayout.Width(200)); if (GUILayout.Button("調用Android函數2:Toast", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("test2","hello joe "); } if (GUILayout.Button("調用Android函數3:GetReturn", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); string s = jo.Call<string>("test3","joe"); this.content = s; } if (GUILayout.Button("調用Android函數4:Max(1,2)", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.test.Max.Max"); int max = jc.CallStatic<int>("Max", 1, 2); this.content = max.ToString(); } if (GUILayout.Button("支付", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("ToMyActivity"); } if (GUILayout.Button("支付2", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("Tonew"); } } }
4.然后就是導出jar包給Unity用。
點選項目名字,file-export-java-jar file,導出jar,只需要src文件就夠咯。其它都是不必要的文件(導出之前最好 project-clean一下)
bin下面放的就是導出的jar包
res可以從android工程里面直接拖進來
AndroidManifest.xml也可以直接拖進來
最后unity導出apk的包名要和android的包名一致。
之前的例子工程找不到了,其實知道了怎么交互,后面要做什么功能,就是在這基礎上擴展了。
補充:
classes.jar
Unity打包apk時候,默認是是打包那個classes.jar的。
但是,如果Unity工程中的Plugins/Android下,有你自定義的jar,那么就會打包你自定義的。默認的就不會被打包了。
這樣,你在自定義的jar里面,做一些自己想要的功能。(搭一個漂亮的充值界面,然后給渠道商充錢……)
類似於jar重載,現在你該理解了吧。
- 本文固定鏈接: http://www.shihuanjue.com/?p=109
- 轉載請注明: 喬 2015年09月27日 於 是幻覺 發表