原创文章如需转载请注明:转载自雨松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() {@Overridepublic void onClick(View v) {//注释1UnityPlayer.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<AndroidJavaObject>("currentActivity")){//调用Android插件中UnityTestActivity中StartActivity0方法,stringToEdit表示它的参数  jo.Call("StartActivity0",stringToEdit);}}}}//注解2void 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://www.xuanyusong.com/archives/676



更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. mybatisplus的坑 insert标签insert into select无参数问题的解决
  3. Python技巧匿名函数、回调函数和高阶函数
  4. Python list sort方法的具体使用
  5. python list.sort()根据多个关键字排序的方法实现
  6. 在Android中监控来电和去电
  7. 如何看待 Kotlin 成为 Android(安卓)官方支持开发语言?
  8. Android(安卓)studio怎么创建文件? Android(安卓)studio新建Java
  9. Android进程保活总结

随机推荐

  1. Android(安卓)Permission denied(
  2. Android(安卓)SDK相关介绍
  3. AndroidUi(4)-圆环
  4. android视频处理相关资料
  5. Android(安卓)Studio实用教程系列文章
  6. android 3G pppd 调试记录
  7. 动画(补间动画)的基础知识
  8. Android(安卓)studio 3.4+ 自定义注解处
  9. Android发送SOAP数据给服务器调用webserv
  10. Android(安卓)的消息队列模型