我们在项目中创建两个Activity一个是主Activity一个是新打开的Activity和内容方面与上一篇文章类似。
UnityTestActivity.java 主Activity ,提供一个接口方法StartActivity(),它是由Unity中调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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发送消息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
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脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
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
)
;
}
}
}
}
//注解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://vdisk.weibo.com/s/abEoV