超牛链AI Logo

超牛链博客: 读书|骑行|笔记分享
user
老王不响
@关于博主
2015-08-23

Unity3D项目实战笔记(4):Unity3D接入Android SDK 6 mins read


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

2015-08-23
老王 加冕为王
老王,工作了19年的软件工程师、连续创业者、Blogger(since 2013),微软.net MVP获得者(2015~2016)、 Unity3D UVP获得者 (2017)。 曾任上市公司研发主管、知名外企Social Media Marketing 。 现专注于Instagram、SEO等海外社交媒体营销技术研究与实践。 四十而立的我,有2个可爱的宝宝,喜好骑行、读书、木工, 尤其喜好历史、科幻书籍。
友情链接
超牛链 57天前 2024年3月6日 15:16

老板大大的文章总是那么优秀,让人惊艳

最新文章

超牛链AI:Ollama本地LLM LangChain RAG小试--算力为王

算力为王时代: CPU --> GPU

GPU这...
【发刊词】超牛链AI: hello world.

​公元2024年,比2023年的AI风暴,更加寒噤。

《一句顶一万句》 遇见一个能说的上话的人不易

2024年 甲辰龙年春节假期,我看了2本小说,茅盾文学...

2023个人总结: AI、骑行、青椒炒肉丝

后疫情时代,刚褪去口罩。又迎来经济消费降级,我的客户同...

热门文章

C#程序员整理的Unity 3D笔记(六):Git源码管理

对程序员而言,写的代码用源码管理系统管理起来,非常方便...

且行且思:记录一次西安城墙国际马拉松---8公里

百度搜索,输入西安城墙马拉松,有7万2千个结果。 实际...

骑行故事初心--自由的御风而行

2023年,三年疫情过后第一个春天,我开始了骑行: 空...

Unity3D for VR 学习(7): 360°全景照片

    在VR应用中,有一个相对简单的虚拟现实体验,那...

相关【技术杂谈】文章

查看所有相关【技术杂谈】文章
搭建Squid3 密码账号IP代理

上文中,说明了 Squid3 IP Proxy 隐藏原IP,这里就搭建Squid 3密码账号IP代理进行整理,涉及...

不用插件,js脚本显示星号密码

不用插件,js脚本显示星号密码

以前,我是用Chrome插件做这个这的--显示星号密码的。 今天,分享一个不用插件...

执行MySQL报错

今天新采购了柒比贰WordPress主题,安装主题时候报错: MySQL命令行使用sql语句进行建表时,MySQL...