Unity3D做手游,强于UI和业务逻辑处理;但一些与手机相关的操作,需要依赖Android系统API,且不用提一些第三方厂家的SDK接入了–原理上是大同小异。

 

开发一个Unity3D的插件,以下是步骤:

  1. 在Eclipse中新建Android Application,并选择 as libray(这样可以生成jar包而不是apk文件)
  2. jar包的最小Android SDK选择为14(即Android 4.0以上系统);且Package一定要和Unity.Identity一致。(猜测是为了方便Unity打包的时候进行合并工作)
  3. 然后在Package视图选择Build–导入Unity3D的classes.jar包(Unity安装目录下自带的)
  4. 修改默认Activity,继承为UnityPlayerActivity;并删除OnCreate中SetContentView函数。
  5. 写供Unity3D调用的的public函数。如Max、Vibrate、ShowMessage2等。
  6. (地址在本文下面,可参见我demo)
  7. export为jar包 (jar包生成放到Plugins\Android\bin\下面),
  8. 拷贝AndroidManfest.xml、res文件夹到 Plugins\Android下面
  9. Unity新建Android.cs文件,并写接入脚本(脚本文件可随便起)
  10. Unity打包apk 真机测试–PC下运行需要写条件编译,Android的方法调用会报错的。

以防万一,rar打开jar包看路径是否是Package的顺序。

 

Unity3D调用Android public函数

  • AndroidJavaClass
  • AndroidJavaObject
  • AndroidJavaProxy

系统提供了这3个函数,且都有源码demo,直接查询Unity3D官方手册即可。

 

Android回调Unity3D

方式1:UnityPlayer.UnitySendMessage("Android","onReceiveByUnitySendMessage", data);

参数 “Android”:Unity3D的GameObject名字

参数“onReceiveByUnitySendMessage”: GameObject下面一个public函数,带string传入参数

参数 data: string类型的数据,会传入到onReceiveByUnitySendMessage函数中。

方式2:Android的interface

在Android中实现一个interface; 然后在Unity3D中实现这个interface的子类;Unity调用Android的时候传递子类实例过去,则Android可以回调之。

package com.xifarm.unity3dPlugins;

public interface ExDataListener {

public void onReceive(String data);

}

 

public class ExDataListenerCallback : AndroidJavaProxy

{

private AndroidTest mMain= null;

public ExDataListenerCallback(AndroidTest main)

: base("com.xifarm.unity3dPlugins.ExDataListener")

{

    mMain = main;

}

public void onReceive(String data)

{

mMain.onReceive(data);

}

}

 

最后,在接入某个特定的Android SDK,如微信、移动MM,请务必牢记:

  1. 熟悉官方的网站
  2. 熟悉官方的SDK
  3. 熟悉官方的文档
  4. 熟悉官方的示例
  5. 熟悉官方的支持

尤其在上网找资料前(特别是百度),官方的资源基本可以解决90%的问题,无他,做为官方,这帮人是最专业,也是最系统的对待自己产品的—-这个是我在担任GCDN版主的感悟。

 

本文的源码在Git上:http://git.oschina.net/xifarm/Unity3DPlugins