Unity3D研究院之与Android相互传递消息
来源:互联网 发布:微信撞库软件 编辑:程序博客网 时间:2024/06/05 04:47
Unity3D研究院之与Android相互传递消息
上一篇文章我们学习了Unity向发送消息,如果Android又能给Unity回馈消息那么这就玩美了。恰好Unity for Andoid 和 IOS一样都是可以相互与Unity发送与接收消息,这篇文章MOMO就和大家好好聊聊Android向Unity发送消息的方法。在读本片博文之前,建议大家读一下我上一篇文章Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八),有关数据打包方面在上一篇中已经说的很清楚,这里就不再赘述。
我们在项目中创建两个Activity一个是主Activity一个是新打开的Activity和内容方面与上一篇文章类似。
UnityTestActivity.java 主Activity ,提供一个接口方法StartActivity(),它是由Unity中调用
<
font
face
=
"Verdana,"
>
package com.xys;
import android.
content
.Context;
import android.
content
.Intent;
import android.os.Bundle;
import com.unity
3
d.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 StartActivity
0
(
String
name
)
{
Intent intent
=
new
Intent
(
mContext
,
TestActivity
0.
class
)
;
intent.putExtra
(
"name"
,
name
)
;
this.startActivity
(
intent
)
;
}
}
<
/
font
>
接着是TestActivity.java 打开这个界面后,程序将在这里向Unity发送消息。
<
font
face
=
"Verdana,"
>
package com.xys;
import com.unity
3
d.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
TestActivity
0
extends Activity
{
@Override
public void onCreate
(
Bundle savedInstanceState
)
{
super.onCreate
(
savedInstanceState
)
;
setContentView
(
R.layout.
main
)
;
TextView
text
=
(
TextView
)
this.findViewById
(
R.
id
.textView
1
)
;
text
.setText
(
this.getIntent
(
)
.getStringExtra
(
"name"
)
)
;
final EditText edit
=
(
EditText
)
this.findViewById
(
R.
id
.edit
)
;
Button
close
=
(
Button
)
this.findViewById
(
R.
id
.button
0
)
;
close
.setOnClickListener
(
new
OnClickListener
(
)
{
@Override
public void onClick
(
View v
)
{
/
/
注释
1
UnityPlayer.UnitySendMessage
(
"Main Camera"
,
"messgae"
,
edit.getText
(
)
.toString
(
)
)
;
TestActivity
0.
this.finish
(
)
;
}
}
)
;
}
}
<
/
font
>
需要在程序头引入包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脚本中接收。
using
UnityEngine;[
/
align]
[
font
=
Verdana
,
]
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中StartActivity
0
方法,stringToEdit表示它的参数
jo.Call
(
"StartActivity0"
,
stringToEdit
)
;
}
}
}
}
/
/
注解
2
void messgae
(
string
str
)
{
stringToEdit
=
str;
}
}
- 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高级界面发送消息与Unity3D消息的接收
- Unity3D_IOS 研究院之IOS高级界面发送消息与Unity3D消息的接收(九)
- Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)
- Unity3D研究院之打开Activity与调用JAVA代码传递参数
- Unity3D研究院之打开Activity与调用JAVA代码传递参数
- Unity3D研究院之打开Activity与调用JAVA代码传递参数
- 子线程使用Toast报错
- INNO setup打包的一段界面美化的code端代码
- [iOS]查看苹果支持的所有字库
- 线程安全问题
- C++位运算
- Unity3D研究院之与Android相互传递消息
- 部署到linux线上服务器webSocket链接失败404
- 人生的第一步
- Android Bitmap内存计算
- 统计学习方法笔记(1)
- 导航栏添加控件实现点击和长按事件
- Matplotlib输出中文显示问题
- 关于const与函数重载问题
- 进程相关