zoukankan      html  css  js  c++  java
  • 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的包名一致。

    之前的例子工程找不到了,其实知道了怎么交互,后面要做什么功能,就是在这基础上扩展了。

  • 相关阅读:
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 Cowboys
    Java实现 蓝桥杯 算法训练 Cowboys
    55. Jump Game
    54. Spiral Matrix
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/joeshifu/p/5489509.html
Copyright © 2011-2022 走看看