原创文章如需转载请注明:转载自雨松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中调用


package com.xys; import android.content.Context; import android.content.Intent; import android.os.Bundle; import com.unity3d.player.UnityPlayerActivity; public class UnityTestActivity extends UnityPlayerActivity { /** Called when the activity is first created. */ Context mContext = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; } public void StartActivity0(String name) { Intent intent = new Intent(mContext,TestActivity0.class); intent.putExtra("name", name); this.startActivity(intent); } }


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


package com.xys; import com.unity3d.player.UnityPlayer; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class TestActivity0 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView text = (TextView)this.findViewById(R.id.textView1); text.setText(this.getIntent().getStringExtra("name")); final EditText edit = (EditText)this.findViewById(R.id.edit); Button close = (Button)this.findViewById(R.id.button0); close.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //注释1 UnityPlayer.UnitySendMessage("Main Camera","messgae",edit.getText().toString()); TestActivity0.this.finish(); } }); } }

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


using UnityEngine; using System.Collections; public class Test : MonoBehaviour { //请输入一个字符串 private string stringToEdit = "Please enter a string"; void Update () { //点击手机返回键关闭应用程序 if (Input.GetKeyDown(KeyCode.Escape) ¦¦ Input.GetKeyDown(KeyCode.Home) ) { Application.Quit(); } } void OnGUI() { //绘制一个输入框接收用户输入 stringToEdit = GUILayout.TextField (stringToEdit, GUILayout.Width(300),GUILayout.Height(100)); //一个提交按钮 if(GUILayout.Button("commit",GUILayout.Height(50))) { //注解1 using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { using( AndroidJavaObject jo = jc.GetStatic("currentActivity")) { //调用Android插件中UnityTestActivity中StartActivity0方法,stringToEdit表示它的参数 jo.Call("StartActivity0",stringToEdit); } } } } //注解2 void messgae(string str) { stringToEdit = str; } }

注解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(安卓)AsyncTask完全解析,带你从源码的角度彻底理解
  2. Android系统启动研究1
  3. .net平台借助第三方推送服务在推送Android消息(极光推送)
  4. android studio运行编译速度慢的解决方法
  5. Android(安卓)Hook 机制之实战模拟
  6. 浅谈Java中Collections.sort对List排序的两种方法
  7. mybatisplus的坑 insert标签insert into select无参数问题的解决
  8. Python技巧匿名函数、回调函数和高阶函数
  9. Python list sort方法的具体使用

随机推荐

  1. Android中的界面去除标题和实现全屏的两
  2. android 兼容性测试 CTS 测试过程(实践测
  3. xUtils 源码解析
  4. proguard rule 惨痛教训(记录)
  5. 安全性“Crypto”提供程序在Android(安卓
  6. 关于eclipse jar导入以及Android的excel
  7. 【Android基础入门No.3】AndroidのListFr
  8. Android(安卓)Studio常用adb命令
  9. 使用Jenkins进行Android自动打包及SonarQ
  10. 十九、android中判断sim卡状态和读取联系