http://xys289187120.blog.51cto.com/3361352/907703/

原创文章如需转载请注明:转载自雨松MOMO独立域名博客,欢迎大家来访!!雨松MOMO程序研究院本文链接地址: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中调用



  
  1. packagecom.xys;

  2. importandroid.content.Context;

  3. importandroid.content.Intent;

  4. importandroid.os.Bundle;

  5. importcom.unity3d.player.UnityPlayerActivity;

  6. publicclassUnityTestActivityextendsUnityPlayerActivity{

  7. /**Calledwhentheactivityisfirstcreated.*/

  8. ContextmContext=null;

  9. @Override

  10. publicvoidonCreate(BundlesavedInstanceState){

  11. super.onCreate(savedInstanceState);

  12. mContext=this;

  13. }

  14. publicvoidStartActivity0(Stringname)

  15. {

  16. Intentintent=newIntent(mContext,TestActivity0.class);

  17. intent.putExtra("name",name);

  18. this.startActivity(intent);

  19. }

  20. }


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


  
  1. packagecom.xys;

  2. importcom.unity3d.player.UnityPlayer;

  3. importandroid.app.Activity;

  4. importandroid.os.Bundle;

  5. importandroid.view.View;

  6. importandroid.view.View.OnClickListener;

  7. importandroid.widget.Button;

  8. importandroid.widget.EditText;

  9. importandroid.widget.TextView;

  10. publicclassTestActivity0extendsActivity{

  11. @Override

  12. publicvoidonCreate(BundlesavedInstanceState){

  13. super.onCreate(savedInstanceState);

  14. setContentView(R.layout.main);

  15. TextViewtext=(TextView)this.findViewById(R.id.textView1);

  16. text.setText(this.getIntent().getStringExtra("name"));

  17. finalEditTextedit=(EditText)this.findViewById(R.id.edit);

  18. Buttonclose=(Button)this.findViewById(R.id.button0);

  19. close.setOnClickListener(newOnClickListener(){

  20. @Override

  21. publicvoidonClick(Viewv){

  22. //注释1

  23. UnityPlayer.UnitySendMessage("MainCamera","messgae",edit.getText().toString());

  24. TestActivity0.this.finish();

  25. }

  26. });

  27. }

  28. }

需要在程序头引入包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脚本中接收。






下面我们看看Test.cs脚本



  
  1. usingUnityEngine;

  2. usingSystem.Collections;

  3. publicclassTest:MonoBehaviour

  4. {

  5. //请输入一个字符串

  6. privatestringstringToEdit="Pleaseenterastring";

  7. voidUpdate()

  8. {

  9. //点击手机返回键关闭应用程序

  10. if(Input.GetKeyDown(KeyCode.Escape)Input.GetKeyDown(KeyCode.Home))

  11. {

  12. Application.Quit();

  13. }

  14. }

  15. voidOnGUI()

  16. {

  17. //绘制一个输入框接收用户输入

  18. stringToEdit=GUILayout.TextField(stringToEdit,GUILayout.Width(300),GUILayout.Height(100));

  19. //一个提交按钮

  20. if(GUILayout.Button("commit",GUILayout.Height(50)))

  21. {

  22. //注解1

  23. using(AndroidJavaClassjc=newAndroidJavaClass("com.unity3d.player.UnityPlayer"))

  24. {

  25. using(AndroidJavaObjectjo=jc.GetStatic<AndroidJavaObject>("currentActivity"))

  26. {

  27. //调用Android插件中UnityTestActivity中StartActivity0方法,stringToEdit表示它的参数

  28. jo.Call("StartActivity0",stringToEdit);

  29. }

  30. }

  31. }

  32. }

  33. //注解2

  34. voidmessgae(stringstr)

  35. {

  36. stringToEdit=str;

  37. }

  38. }

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

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




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




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




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

源码下载地址:http://115.com/file/e7idavxk#android.unitypackage

更多相关文章

  1. android android屏幕禁止休眠和锁屏的方法
  2. android的Handler
  3. android的Handler
  4. Android向服务器传接和接收数据的方法汇总
  5. Handler机制情景分析
  6. Android—android与js交互以及相互传参
  7. Android中R.java没有自动生成解决方案
  8. Android(安卓)Service 服务详细讲解
  9. 详解 Android(安卓)的 Activity 组件

随机推荐

  1. java android客户端SSL通信 遇到的几个报
  2. Android X库 BiometricPrompt 中 Crypto
  3. Android 混淆代码问题总结
  4. Android字体加粗
  5. ubuntu搭建Android NDK环境与Android Stu
  6. SDK3.0 组件属性
  7. 2-8 Android 简单介绍 (一)
  8. Android 不要做错来使内存泄漏
  9. Android中Service与Thread的区别
  10. Android调试问题集锦