打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

 



原创文章如需转载请注明:转载自雨松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. package com.xys;   
  2.    
  3. import android.content.Context;   
  4. import android.content.Intent;   
  5. import android.os.Bundle;   
  6.    
  7. import com.unity3d.player.UnityPlayerActivity;   
  8.    
  9. public class UnityTestActivity extends UnityPlayerActivity {   
  10.     /** Called when the activity is first created. */   
  11.    
  12.     Context mContext = null;   
  13.     @Override   
  14.     public void onCreate(Bundle savedInstanceState) {   
  15.         super.onCreate(savedInstanceState);   
  16.         mContext = this;   
  17.    
  18.     }   
  19.    
  20.     public void StartActivity0(String name)   
  21.     {   
  22.         Intent intent = new Intent(mContext,TestActivity0.class);   
  23.         intent.putExtra("name", name);   
  24.         this.startActivity(intent);   
  25.     }   
  26.    
  27. }   

 


 





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





 


  1. package com.xys;   
  2.    
  3. import com.unity3d.player.UnityPlayer;   
  4.    
  5. import android.app.Activity;   
  6. import android.os.Bundle;   
  7. import android.view.View;   
  8. import android.view.View.OnClickListener;   
  9. import android.widget.Button;   
  10. import android.widget.EditText;   
  11. import android.widget.TextView;   
  12.    
  13. public class TestActivity0 extends Activity {   
  14.    
  15.     @Override   
  16.     public void onCreate(Bundle savedInstanceState) {   
  17.         super.onCreate(savedInstanceState);   
  18.         setContentView(R.layout.main);   
  19.    
  20.         TextView text = (TextView)this.findViewById(R.id.textView1);   
  21.         text.setText(this.getIntent().getStringExtra("name"));   
  22.    
  23.         final EditText edit = (EditText)this.findViewById(R.id.edit);   
  24.    
  25.         Button close = (Button)this.findViewById(R.id.button0);   
  26.         close.setOnClickListener(new OnClickListener() {   
  27.    
  28.             @Override   
  29.             public void onClick(View v) {   
  30.                 //注释1   
  31.                 UnityPlayer.UnitySendMessage("Main Camera","messgae",edit.getText().toString());   
  32.                 TestActivity0.this.finish();   
  33.             }   
  34.         });   
  35.     }   
  36.    
  37. }   

 


 


 


 需要在程序头引入包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. using UnityEngine;   
  2. using System.Collections;   
  3.    
  4. public class Test : MonoBehaviour   
  5. {   
  6.    
  7.     //请输入一个字符串   
  8.     private string stringToEdit = "Please enter a string";   
  9.    
  10.     void Update ()   
  11.     {   
  12.         //点击手机返回键关闭应用程序   
  13.         if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) )   
  14.         {   
  15.             Application.Quit();   
  16.         }   
  17.     }   
  18.    
  19.     void OnGUI()   
  20.     {   
  21.         //绘制一个输入框接收用户输入   
  22.         stringToEdit = GUILayout.TextField (stringToEdit, GUILayout.Width(300),GUILayout.Height(100));   
  23.    
  24.         //一个提交按钮   
  25.         if(GUILayout.Button("commit",GUILayout.Height(50)))   
  26.         {   
  27.             //注解1   
  28.               using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))   
  29.             {   
  30.                  using( AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))   
  31.                 {   
  32.                     //调用Android插件中UnityTestActivity中StartActivity0方法,stringToEdit表示它的参数   
  33.                       jo.Call("StartActivity0",stringToEdit);   
  34.                 }   
  35.    
  36.             }   
  37.    
  38.         }   
  39.    
  40.     }   
  41.     //注解2   
  42.     void messgae(string str)   
  43.     {   
  44.         stringToEdit = str;   
  45.     }   
  46.    
  47. }   

 


 


 


注解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


 

本文出自 “雨松MOMO的程序世界” 博客,请务必保留此出处http://xys289187120.blog.51cto.com/3361352/907703


     
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
unity3D接入小米盒子SDK
Building Plugins for iOS 为iOS创建插件
实现Unity和Android进行交互
Unity与安卓交互 之 ✨ 在Android Studio中写代码导出aar包,在Unity中使用交互(小白完整篇)
unity
Android/Unity大乱斗-完整双方集成交互指南
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服