Unity3D与Android之间的通信

Unity3D与Android之间的通信

1.首先创建一个Android工程,,设置AndroidAPI最小为2.3,

然后next,勾选Make this project as library选项。然后一直next直到finish。

2.将Unity3D的classes.jar包导入到Android工程中。

      2.1在Unity安装目录下搜索classes.jar 会出现两个classes.jar,随便选择一个(两个中的任意一个),将其copy到桌面。

2.2将classes.jar包导入到Android工程中

选中工程,右键——》Build Path——》Add External Archives:

选择classes.jar包:

点击打开按钮,将classes.jar导入到Android工程中。导入后在Android工程中,Referenced Libraries会有我们导入的jar包。

3.引入包

引入com.unity3d.player.UnityPlayer和 com.unity3d.player.UnityPlayerActivity两个包,并替换MainActivity继承的基类为UnityPlayerActivity,删除多余的代码。

packagecom.example.test;

 

importandroid.os.Bundle;

importcom.unity3d.player.UnityPlayer;

importcom.unity3d.player.UnityPlayerActivity;

 

public class MainActivity extends UnityPlayerActivity {

    protected voidonCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

    }

}

 

4.然后添加我们自己的代码:

packagecom.example.test;

 

importandroid.os.Bundle;

importcom.unity3d.player.UnityPlayer;

importcom.unity3d.player.UnityPlayerActivity;

 

public class MainActivity extends UnityPlayerActivity {

 

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

    }

   

    public void Test1 () {

             //这里的UnityPlayer.UnitySendMessage();是Android工程调用Unity中的方法

             //其中参数1是调用Unity中的游戏对象

             //参数2是调用游戏对象上挂载脚本中的方法名

             //参数3是方法的参数

             UnityPlayer.UnitySendMessage("Cube","BackCall", "Android");//即调用Cube游戏对象上的脚本中的BackCall方法,参数是Android

    }

   

    // 返回一个string类型

    public String Test2 () {

             return"Test";

    }

}

5.创建另一个package:

命名为com.example.test2:

创建一个新类:

写入一下代码,注意这个类中的方法必须是static的:

packagecom.example.test2;

 

public class Test2 {

         //必须是static类型的

         public static int Max (int x,int y) {

                   return x > y ? x : y;

         }

}

6.将Android工程中的res文件夹、libs文件夹、以及AndroidManifest.xml文件copy到桌面上

将android工程中的src文件夹导出为jar包:

右键——》Export

选择Java——》JAR file:

然后next:

JAR file:名字随便取,保存到桌面,点击Finish。

7.然后将桌面上的res文件夹、AndroidManifest.xml、libs文件夹以及上步中导出的jar包导入到Unity中,注意一定是Unity中Assets目录下的Plugins文件夹下的Android文件夹中。

8.然后创建在Unity中调用Android中的方法。注意第四步中的Test1方法。Unity中已经创建了Cube游戏对象,在Cube游戏对象上挂载一个一个脚本组件,该脚本组件中有一个BackCall的方法。

using UnityEngine;

using System.Collections;

 

public classTest :MonoBehaviour {

    privatestringinfo ="Name";

    voidOnGUI()

    {

        if(GUILayout.Button("Test1"))

        {

            //固定写法,调用Android中的方法。

            AndroidJavaClass jc =new AndroidJavaClass("com.unity3d.player.UnityPlayer");

            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

            //调用Test1方法

           jo.Call("Test1");

        }

        if(GUILayout.Button("Test2"))

        {

            AndroidJavaClass jc =new AndroidJavaClass("com.unity3d.player.UnityPlayer");

            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

            //调用Test2方法,尖括号中是Test2方法的返回值

           info = jo.Call<string>("Test2");

        }

        if(GUILayout.Button("Max"))

        {

            //调用com.example.test2包下的Test2类中的方法Max方法

            AndroidJavaClass jc =new AndroidJavaClass("com.exmaple.test2.Test2");

            //因为Max方法是Static的,所以调用CallStatic方法,参数1Android中的方法名,参数2是方法的参数,返回值是Int型,所以尖括号中是int

           info = jc.CallStatic<int>("Max",new object[]{1,2})+"";

        }

 

        GUILayout.Box(info);

 

    }

 

    public void BackCall(string str)

    {

        info= str;

    }

}

 

9.设置Bundle Identifier

File——》Build Settings——》PlayerSettings:

这里的BundleIdentifier一定要和AndroidManifest.xml中的Package一样:

如果不一样,程序就会挂掉,而且在Unity中设置的横屏竖屏也一定要和AndroidManifest.xml中设置的一样,否则也会导致程序挂掉。

10.打包成APK

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值