前言

前段时间帮 Unity 游戏组的同事接支付功能,用到 Unity 与 Android 的交互。这篇文章就来总结一下。

交互方式

Android 与 Unity 的交互有两种方式:Android 作为 Unity 的一部分或者把 Unity 作为 Android 的一部分。至于使用哪种方式,就要根据具体情况来决定了。

如果你的项目是以 Unity 为主( Unity 的部分需要经常改动,而 Android 的部分比较固定),就把 Android 作为 Unity 的一部分来实现交互。

如果你的项目是以 Android 为主( Android 的部分需要经常改动, Unity 部分比较固定),这时就把 Unity 作为 Android 的插件来使用。

Android 作为 Unity 的一部分

使用这种方法时我们需要使用 Unity 为 Android 提供的一个叫做 classes.jar 的库。首先,我们要在 Unity 的安装路径下找到这个库。由于 Unity 版本的不同这个库所在的路径会有不同,笔者这里提供一个大致的位置 /Unity 的安装目录/PlaybackEngines/AndroidPlayer/Variations/il2cpp/Release/Classes/classes.jar。这个路径是 Mac 下的,Unity 的版本是 5.3.5 f1 Personal。

新建 Android 项目

在 Eclipse 中新建一个 Android 项目。然后把上述 classes.jar 作为外部的库导入项目中。如下图:

Android 与 Unity 交互一_第1张图片

继承 UnityPlayerActivity

MainActivity 继承 UnityPlayerActivity。

    public class MainActivity extends UnityPlayerActivity {      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          //显示 Unity 内容          setContentView(mUnityPlayer);          mUnityPlayer.requestLayout();      }      public void onClick(View v) {          // 调用 Unity 的方法          UnityPlayer.UnitySendMessage("Player", "ZoomIn", "");      }      // 被 Unity 调用的方法      public String getName(String s) {          return "TestUnity";      }    }

第 7 行,是将 Unity 的内容显示到 Activity。注意:在 Unity 5.1 版本中 mUnityPlayer 变量名是 a。所以,如果你的 Unity 是 5.1 版本的,第 7 、 8 行应该换成 setContentView(a); a.requestLayout();

第 13 行,是 Android 调用 Unity 的方法。其中第一个参数是 Unity 组件的名字;第二个参数,被调用方法的方法名;第三个参数是被调用方法的实参。这个参数只能是 String 类型的。

导出 Android 包

把 Android 项目设置成 library。如下图:

Android 与 Unity 交互一_第2张图片

然后clean 项目并 build 。在项目的 bin 文件夹下会生成 .jar 的文件。如下图:

Android 与 Unity 交互一_第3张图片

在桌面新建 Android 文件夹,在 Android 文件夹中,新建 bin 文件夹。
将项目里 bin 下新生成的 jar 包,复制到新建的 Android 文件夹下的 bin 目录下。如果 Android 项目有用到 aidl 也要将项目下 bin 里的 aidl 文件夹复制到新建的 Android 文件夹下的 bin 目录下。除此之外,把上图中画红框的文件复制到新建的 Android 文件夹下。

设置 Unity

在 Assets 下新建 Plugins 包,将上述新建的 Android 文件夹拖拽到 Plugins 里面。如下图:

Android 与 Unity 交互一_第4张图片

添加代码

    public class textOperate : MonoBehaviour {      // Use this for initialization      public Text text;      void Start () {        this.name = "Count Text";        GetData ();      }      void GetData(){        //调用 Android 的方法        AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");        AndroidJavaObject jo = jc.GetStatic ("currentActivity");        string name = jo.Call<string> ("getName", "成功调用android方法");        text.text = name;      }    }

第 13 行到第 16 行是 Unity 调用 Android 的代码,其中第 16 行 jo.Call ("getName", "成功调用android方法")的第一个参数是被调用方法的方法名,第二个参数是被调用方法的实参,这个参数是不定参数可以有多个。

打包 APK

点击 File –> BuildSetting,如下图:

Android 与 Unity 交互一_第5张图片

选中 Android ,点击 Switch Platform ;然后点击 Player Setting ,出现如下界面:

Android 与 Unity 交互一_第6张图片

将 Bundle Identifier 改为 Android 的包名。点击 Build 进行打包,如下图:

Android 与 Unity 交互一_第7张图片

结语

这篇文章就先介绍到这里。下篇文章介绍如何从 Unity 里导出 Android 项目把 Unity 作为 Android 的一部分来实现交互。

更多相关文章

  1. 另类方法屏蔽Android4.03的HOME按键
  2. android SDK更新方法总结
  3. android设置Activity背景色为透明的2种方法
  4. android中设置分隔线几种方法
  5. android 使用DigestUtilsmd5加密的方法
  6. Android getWindow().setFlags方法与SD卡权限
  7. android 浏览器怎么支持 window.close() 和window.opener.locati
  8. 《android 1: 创建一个安卓项目》
  9. Android修改自己程序字体的方法详解

随机推荐

  1. Linux Kernel and Android 休眠与唤醒
  2. phonegap系列之API(七)android的本地事件
  3. Android Studio使用过程中遇到的问题(一)--
  4. android 常用命令行笔记
  5. android软件工程师/android中间件开发
  6. TensorFlow集成Android工程的框架
  7. com.android.dx.cf.iface.ParseException
  8. Android常用Manager
  9. Error:Module production: java.lang.NoC
  10. android 常见错误:fabric connection time