Unity3D研究院之与Android相互传递消息(十九)
来源:互联网 发布:windows 无法访问指定 编辑:程序博客网 时间:2024/05/17 05:10
原创文章如需转载请注明:转载自雨松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
- Unity3D研究院之与Android相互传递消息(十九)
- Unity3D研究院之与Android相互传递消息(十九)
- Unity3D研究院之与Android相互传递消息(十九)
- Unity3D研究院之与Android相互传递消息(十九)
- Unity3D研究院之与Android相互传递消息
- Unity3D研究院之与Android相互传递消息
- Unity3D研究院之与Android相互传递消息
- Unity3D研究院之与Android相互传递消息
- Unity3D与Android相互传递消息
- Unity3D与Android相互传递消息
- Unity3D 与Android 相互传递消息
- Unity3D:unity与Android相互传递消息 & unity与ios相互传递消息
- Unity3D_IOS 研究院之IOS高级界面发送消息与Unity3D消息的接收(九)
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- 90%以上效率的AC24V逆变器
- opencv2.0以后新增C++接口的 Mat矩阵 单行赋值及矩阵合并的问题与实现(苦心研究多天才解决!)
- 简史
- 整数取反相关
- 不同浏览器中nextSibling方法注意事项
- Unity3D研究院之与Android相互传递消息(十九)
- Cannot open precompiled header file: 预编译头文件
- asp.net页面加载执行顺序
- 终于会用sql server中的With了,超简单,超方便!(原创总结)
- 使用IO流的规律总结:
- 进程的用户身份
- Copy binary文件到开发板
- 重读<Understanding The Linux Virtual Memory Manager>笔记
- 黑马程序员_IO类_File类的学习