Unity 整合聯通SDK

來源:互聯網
上載者:User

標籤:

我相信Unity程式員都會遇到加入SDK的問題,我相信如果你不會android編程,我相信你的CPU當場計算過快而爆炸!  這裡也寫筆記希望能協助大家

如果有講錯的地方,希望大家能回複並且提供答案!  讓我們共同抵抗SDK 呵呵

預備知識:

1. Unity接入SDK有兩種方式:

         第一種:  Eclipse寫好外掛程式放入Unity當中,Unity 寫好代碼直接發布遊戲 (運氣好,盤子臉使用的第一種方式)

         第二種: Unity先寫好代碼-》android項目-》Eclipse進行SDK接入-》使用Eclipse發布SDK

 

2. Unity調用java寫的方法: (注釋不太會寫,我也不懂Android編程)

//擷取Unity系統類別AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//這裡應該是擷取當前頁面AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");//調用order靜態方法,傳遞四個參數[當前頁面,計費號,回調Unity的遊戲物體名稱,回調Unity的方法名]activity.CallStatic("order", new object[] { activity, "001", "Cube", "Bakcground" });

 

3. android調用Unity寫的方法

//[遊戲物體名稱,方法名,傳遞的參數]UnityPlayer.UnitySendMessage(gameObject,runtimeScript,arg1+"");

 

 

注意事項: (聯通SDK)

1. 你寫好的程式發布APK,在手機直接崩潰原因:

        1. Unity的Bundle Identifier (跟你建立android項目那個程式主入口 package xxx.xxx.xxx)不匹配

        2. 你的Android外掛程式放入Unity‘的時候位置出錯:  (一是按照聯通SDK拷貝,你發現少了xxx,我只能呵呵了)

 

3. 聯通SDK調用,如果你寫一個方法,直接調用pay()彈出支付介面(直接程式崩潰),你怎麼死的你都不用知道!

        Utils.getInstances().pay(context mContext,String number ,UniPayResultListener listener);    今天問了下坐我對面的哥哥,=。= 他告訴我是什麼子線程去調用UI報錯了. 然後我有一直猜是什麼錯誤。。。。

Unity 3D手機遊戲開發PDF  作者:金璽曾(在發布android遊戲如何接入SDK講的很詳細) eclipse中寫的代碼:

 

package com.example.helloworldsdk;   //這裡必須要跟Unity ID對應import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.content.Context;import com.unicom.dcLoader.Utils;import com.unicom.dcLoader.Utils.UnipayPayResultListener;import com.unity3d.player.UnityPlayer;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {        private Context context;    private String gameObject;    private String runtimeScript;    private UnipayPayResultListenerImp imp = new UnipayPayResultListenerImp();    private UniPayHandler handler = new UniPayHandler();    public static MainActivity _instance;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);            //初始化SDK        Utils.getInstances().initSDK (MainActivity.this,0);        _instance = this;    }            public static void order(Context _context,String number,String gameObject,String runtimeScript){        _instance.payPage(_context, number, gameObject, runtimeScript);    }        //調用支付頁面    public void payPage(Context _context,String number,String gameObject,String runtimeScript){        this.context = _context;        this.gameObject = gameObject;        this.runtimeScript = runtimeScript;        
        //利用handler調用pay才能正確的彈出支付介面               Message msg=new Message();        msg.obj=number;        handler.sendMessage(msg);    }        class UniPayHandler extends Handler    {        public void handleMessage(Message message)        {            Utils.getInstances().pay(context,(String)message.obj,imp);        }    }        class UnipayPayResultListenerImp implements UnipayPayResultListener    {        @Override        public void PayResult(String arg0, int arg1, String arg2) {            //[遊戲物體名稱,方法名,傳遞的參數]            UnityPlayer.UnitySendMessage(gameObject,runtimeScript,arg1+"");                    }            }    }

  Unity中的代碼:

using UnityEngine;using System.Collections;using System;public class Test : MonoBehaviour {    private string error;    void OnGUI() {        if(GUI.Button(new Rect(0,0,100,100),"支付頁面"))        {            try             {                                //擷取Unity系統類別                AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");                //這裡應該是擷取當前頁面                AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");                //調用order靜態方法,傳遞四個參數[當前頁面,計費號,回調Unity的遊戲物體名稱,支付回調Unity的方法名]                activity.CallStatic("order", new object[] { activity, "001", "Cube", "Bakcground" });                                            }catch(Exception e)            {                error += e.Message;            }        }        GUI.Label(new Rect(0, 300, 800, 300), error);    }    public void Bakcground(string result)     {        error += "回調成功:" + result;    }    }

 

接入SDK步驟:

1. 建立新的android項目

2. 匯入classes.jar(Unity這個你可以查下在那個檔案夾下)

3. 拷貝libs下的全部到 eclipse的libs下覆蓋

4. 修改AndroidManifest.xml

5. 編寫被Unity調用的代碼,整個項目匯出jar包,放入 Plugins/Android檔案下

6. 拷貝eclipse的libs檔案夾到 Plugins/Android檔案下

7. 拷貝AndroidManifest.xml到 Plugins/Android檔案下

8. 解壓Multimode_UniPay_base.jar 和Multimode_UniPay_extend.jar包,在當前檔案夾下,只把assets檔案夾拷貝到Plugins/Android檔案下

9. 寫好代碼,直接使用Unity發布APK即可

 

Unity和android通訊的資料:

http://blog.csdn.net/xv_ly15/article/details/9314199   Unity調用android函數列子

http://blog.csdn.net/richway2010/article/details/6640837 Eclipse真機調試

 

祝大家生活愉快! 盤子臉

Unity 整合聯通SDK

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.