Unity3d與Android交互


先看下效果

你一定會說,然並卵!
沒錯,這里只是一個最簡單的例子,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重載,現在你該理解了吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM