標籤:
我相信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