标签:
我相信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+"");
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讲的很详细)
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+""); } } }
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; } }
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即可
http://blog.csdn.net/xv_ly15/article/details/9314199 Unity调用android函数列子
http://blog.csdn.net/richway2010/article/details/6640837 Eclipse真机调试
祝大家生活愉快! 盘子脸
标签:
原文地址:http://www.cnblogs.com/plateFace/p/4227493.html