首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之与Android相互传递消息(十九)
2012
05-03

Unity3D研究院之与Android相互传递消息(十九)

          上一篇文章我们学习了Unity向Android发送消息,如果Android又能给Unity回馈消息那么这就玩美了。恰好Unity for Andoid 和 IOS一样都是可以相互与Unity发送与接收消息,这篇文章MOMO就和大家好好聊聊Android向Unity发送消息的方法。在读本片博文之前,建议大家读一下我上一篇文章Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)有关数据打包方面在上一篇中已经说的很清楚,这里就不再赘述。

我们在项目中创建两个Activity一个是主Activity一个是新打开的Activity和内容方面与上一篇文章类似。

UnityTestActivity.java 主Activity ,提供一个接口方法StartActivity(),它是由Unity中调用

接着是TestActivity.java 打开这个界面后,程序将在这里向Unity发送消息。 

 需要在程序头引入包import com.unity3d.player.UnityPlayer; 因为向Unity发送消息的静态方法写在这里。

注释1:意思是点击发送按钮后,程序将向Unity发送消息。UnityPlayer.UnitySendMessage() 参数1表示发送游戏对象的名称,参数2表示对象绑定的脚本接收该消息的方法,参数3表示本条消息发送的字符串信息,这个方法与IOS发送消息的方式非常相像。

接着,我们打开Unity工程将Android插件打包好复制在Unity工程当中,详细打包过程请看上一章,将脚本Test.cs绑定在Main Camera对象中,此时由于UnityPlayer.UnitySendMessage()方法发送消息给MainCamera对象,所以需要在Main Camera对象绑定的脚本中去接收这个消息,也就是说要在Test.cs脚本中接收。

 

Unity3D研究院之与Android相互传递消息(十九) - 雨松MOMO程序研究院 - 1

(图片比较大,点击后浏览大图)

 

下面我们看看Test.cs脚本

 注解1:让代码放置在using中是为了告诉垃圾回收站及时的回收垃圾,建议这样来写代码。AndroidJavaClass表示一个java类,AndroidJavaObject表示一个java对象,在上一章已经明确说明。另外还有一些其它的方法,比如调用静态方法等,都在API中写的很清楚,大家可以查阅学习。

注解2:刚刚调用的方法UnityPlayer.UnitySendMessage()参数2为”message”,所以程序将调用 Main Camera对象的Test.cs脚本的message方法,参数为Android传递过来的。最后在这里修改了stringToEdit变量刷新了屏幕的UI。

 

Unity3D研究院之与Android相互传递消息(十九) - 雨松MOMO程序研究院 - 2

 

          打开程序后将启动Unity画面,如上图在这里我们写了输入框接收用户的键盘输入,最后用户点击commit按钮程序将打开Android的Activity,并且将字符串“Please enter a string”做为参数传递给了新Activity。

 

Unity3D研究院之与Android相互传递消息(十九) - 雨松MOMO程序研究院 - 3

 

         如上图所示,在新打开的Activity中已经看到Please enter a string字符串已经显示在界面当中,在布局文件中同样写了Android的高级控件 输入框与按钮,在输入框中输入字符串“xuanyusong”(任意输入),点击保存按钮将把”xuanyusong”刚刚输入的字符串传递给Unity。

 

Unity3D研究院之与Android相互传递消息(十九) - 雨松MOMO程序研究院 - 4

 

如上图所示,此时在Unity中字符串“xuanyusong”已经显示在输入框中,那么这样就比较完美了实现发送与接收消息。希望大家继续支持雨松MOMO程序研究院。

 

源码下载地址:http://vdisk.weibo.com/s/abEoV

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

Unity3D研究院之与Android相互传递消息(十九)》有 104 条评论

  1. li 说:

    雨松momo大神,请教两个问题,一个是unity发布Android后是全屏的,怎么设置成不全屏呢,第二个是android界面跳到unity场景中间有黑屏等待,能解决吗

  2. 小浣熊 说:

    大神你好,我用安卓调u3d,进入了u3d界面,然后我按返回键不能回到安卓界面,怎么办啊?

  3. 说:

    不退出 Android 界面 怎么给Unity 发送消息并 回调Android 方法

  4. 弦歌忘忧 说:

    你好momo我现在的项目一半是android,一半是u3d,二者要互相调用是做不到的吗?如果main_activity主入口是u3d自己的activity,那jc.GetStatic(“currentActivity”); 中得到的当前静态activity应该是u3d本身的activity,那怎样才能通过这个由u3d封装好的activity调出android包里的activity呢?

    • 弦歌忘忧 说:

      又看了些博客文档,感觉稍微摸到了unity的想法事实上as里的UnityPlayerActivity与unity打包出来的activity是同一个activity所以在as里多做出来的方法可以通过 jc.GetStatic(“currentActivity”) .call调用到,我并没有新做一个activity出来,而是在unity做的那个activity里添加了一些方法这样一想就妥了

  5. Stellar Li 说:

    这个问题解决了吗?我也碰到了,求告知

  6. Stellar Li 说:

    我也出现了这个错误”Caused by: java.lang.UnsatisfiedLinkError: Native method not found: com.unity3d.player.UnityPlayer.UnitySendMessage”,我的开发工具是android studio,但当我用eclipse时就不会出现这个错误,很奇怪,研究很久了不知道怎么解决,难道是gradle编译的问题?

留下一个回复

你的email不会被公开。