• Unity 集成联通SDK


    我相信Unity程序员都会遇到加入SDK的问题,我相信如果你不会android编程,我相信你的CPU当场计算过快而爆炸!  这里也写笔记希望能帮助大家

    如果有讲错的地方,希望大家能回复并且提供答案!  让我们共同抵抗SDK 呵呵

    联通SDK视频教程: http://www.taikr.com/course/197 

    预备知识:

    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)不匹配

    image

            2. 你的Android插件放入Unity'的时候位置出错:  (一下图是按照联通SDK拷贝,你发现少了xxx,我只能呵呵了)

    image

    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真机调试

    祝大家生活愉快! 盘子脸

    如果你感兴趣,你可以把你妹妹介绍给我
  • 相关阅读:
    Android登入界面
    安卓第4周作业
    第13周作业
    5.28上机作业
    5.22作业
    数据返回值
    登录
    安卓
    安卓第四周
    安卓第四周
  • 原文地址:https://www.cnblogs.com/plateFace/p/4227493.html
Copyright © 2020-2023  润新知