自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Unity3D研究之與Android相互傳遞消息

移動(dòng)開(kāi)發(fā) iOS 游戲開(kāi)發(fā)
上一篇文章我們學(xué)習(xí)了Unity向Android發(fā)送消息,如果Android又能給Unity回饋消息那么這就玩美了。恰好Unity for Andoid 和iOS一樣都是可以相互與Unity發(fā)送與接收消息

上一篇文章我們學(xué)習(xí)了Unity向Android發(fā)送消息,如果Android又能給Unity回饋消息那么這就玩美了。恰好Unity for Andoid 和 IOS一樣都是可以相互與Unity發(fā)送與接收消息,這篇文章MOMO就和大家好好聊聊Android向Unity發(fā)送消息的方法。在讀本片博文之前,建議大家讀一下我上一篇文章Unity3D研究院之打開(kāi)Activity與調(diào)用JAVA代碼傳遞參數(shù)(十八),有關(guān)數(shù)據(jù)打包方面在上一篇中已經(jīng)說(shuō)的很清楚,這里就不再贅述。

我們?cè)陧?xiàng)目中創(chuàng)建兩個(gè)Activity一個(gè)是主Activity一個(gè)是新打開(kāi)的Activity和內(nèi)容方面與上一篇文章類似。

UnityTestActivity.java 主Activity ,提供一個(gè)接口方法StartActivity(),它是由Unity中調(diào)用

[代碼]java代碼:

01 package com.xys;
02  
03 import android.content.Context;
04 import android.content.Intent;
05 import android.os.Bundle;
06  
07 import com.unity3d.player.UnityPlayerActivity;
08  
09 public class UnityTestActivity extends UnityPlayerActivity {
10     /** Called when the activity is first created. */
11  
12     Context mContext = null;
13     @Override
14     public void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         mContext = this;
17  
18     }
19  
20     public void StartActivity0(String name)
21     {
22         Intent intent = new Intent(mContext,TestActivity0.class);
23         intent.putExtra("name", name);
24         this.startActivity(intent);
25     }
26  
27 }

接著是TestActivity.java 打開(kāi)這個(gè)界面后,程序?qū)⒃谶@里向Unity發(fā)送消息。

[代碼]java代碼:

01 package com.xys;
02  
03 import com.unity3d.player.UnityPlayer;
04  
05 import android.app.Activity;
06 import android.os.Bundle;
07 import android.view.View;
08 import android.view.View.OnClickListener;
09 import android.widget.Button;
10 import android.widget.EditText;
11 import android.widget.TextView;
12  
13 public class TestActivity0 extends Activity {
14  
15     @Override
16     public void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.main);
19  
20         TextView text = (TextView)this.findViewById(R.id.textView1);
21         text.setText(this.getIntent().getStringExtra("name"));
22  
23         final EditText edit = (EditText)this.findViewById(R.id.edit);
24  
25         Button close = (Button)this.findViewById(R.id.button0);
26         close.setOnClickListener(new OnClickListener() {
27  
28             @Override
29             public void onClick(View v) {
30                 //注釋1
31                 UnityPlayer.UnitySendMessage("Main Camera","messgae",edit.getText().toString());
32                 TestActivity0.this.finish();
33             }
34         });
35     }
36  
37 }

需要在程序頭引入包import com.unity3d.player.UnityPlayer; 因?yàn)橄騏nity發(fā)送消息的靜態(tài)方法寫在這里。

注釋1:意思是點(diǎn)擊發(fā)送按鈕后,程序?qū)⑾騏nity發(fā)送消息。UnityPlayer.UnitySendMessage() 參數(shù)1表示發(fā)送游戲?qū)ο蟮拿Q,參數(shù)2表示對(duì)象綁定的腳本接收該消息的方法,參數(shù)3表示本條消息發(fā)送的字符串信息,這個(gè)方法與IOS發(fā)送消息的方式非常相像。

接著,我們打開(kāi)Unity工程將Android插件打包好復(fù)制在Unity工程當(dāng)中,詳細(xì)打包過(guò)程請(qǐng)看上一章,將腳本Test.cs綁定在Main Camera對(duì)象中,此時(shí)由于UnityPlayer.UnitySendMessage()方法發(fā)送消息給MainCamera對(duì)象,所以需要在Main Camera對(duì)象綁定的腳本中去接收這個(gè)消息,也就是說(shuō)要在Test.cs腳本中接收。

(圖片比較大,點(diǎn)擊后瀏覽大圖)

下面我們看看Test.cs腳本

[代碼]c#/cpp/oc代碼:

01 using UnityEngine;
02 using System.Collections;
03  
04 public class Test : MonoBehaviour
05 {
06  
07     //請(qǐng)輸入一個(gè)字符串
08     private string stringToEdit = "Please enter a string";
09  
10     void Update ()
11     {
12         //點(diǎn)擊手機(jī)返回鍵關(guān)閉應(yīng)用程序
13         if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) )
14         {
15             Application.Quit();
16         }
17     }
18  
19     void OnGUI()
20     {
21         //繪制一個(gè)輸入框接收用戶輸入
22         stringToEdit = GUILayout.TextField (stringToEdit, GUILayout.Width(300),GUILayout.Height(100));
23  
24         //一個(gè)提交按鈕
25         if(GUILayout.Button("commit",GUILayout.Height(50)))
26         {
27             //注解1
28               using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
29             {
30                  using( AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
31                 {
32                     //調(diào)用Android插件中UnityTestActivity中StartActivity0方法,stringToEdit表示它的參數(shù)
33                       jo.Call("StartActivity0",stringToEdit);
34                 }
35  
36             }
37  
38         }
39  
40     }
41     //注解2
42     void messgae(string str)
43     {
44         stringToEdit = str;
45     }
46  
47 }

 注解1:讓代碼放置在using中是為了告訴垃圾回收站及時(shí)的回收垃圾,建議這樣來(lái)寫代碼。AndroidJavaClass表示一個(gè)java 類,AndroidJavaObject表示一個(gè)java對(duì)象,在上一章已經(jīng)明確說(shuō)明。另外還有一些其它的方法,比如調(diào)用靜態(tài)方法等,都在API中寫的很清楚,大家可以查閱學(xué)習(xí)。

注解2:剛剛調(diào)用的方法UnityPlayer.UnitySendMessage()參數(shù)2為”message”,所以程序?qū)⒄{(diào)用 Main Camera對(duì)象的Test.cs腳本的message方法,參數(shù)為Android傳遞過(guò)來(lái)的。***在這里修改了stringToEdit變量刷新了屏幕的UI。

打開(kāi)程序后將啟動(dòng)Unity畫面,如上圖在這里我們寫了輸入框接收用戶的鍵盤輸入,***用戶點(diǎn)擊commit按鈕程序?qū)⒋蜷_(kāi)Android的 Activity,并且將字符串“Please enter a string”做為參數(shù)傳遞給了新Activity。

如上圖所示,在新打開(kāi)的Activity中已經(jīng)看到Please enter a string字符串已經(jīng)顯示在界面當(dāng)中,在布局文件中同樣寫了Android的高級(jí)控件 輸入框與按鈕,在輸入框中輸入字符串“xuanyusong”(任意輸入),點(diǎn)擊保存按鈕將把”xuanyusong”剛剛輸入的字符串傳遞給 Unity。

如上圖所示,此時(shí)在Unity中字符串“xuanyusong”已經(jīng)顯示在輸入框中,那么這樣就比較***了實(shí)現(xiàn)發(fā)送與接收消息。

 

責(zé)任編輯:冰凝兒
相關(guān)推薦

2012-12-24 09:08:14

iOSUnity3D

2012-12-24 09:20:48

AndoidUnity3D

2012-12-24 09:13:23

iOSUnity3D

2012-12-24 09:15:57

iOSUnity3D

2012-12-24 09:11:58

iOSUnity3D

2012-12-24 09:19:31

iOSUnity3D

2012-12-24 08:57:35

iOSUnity3D

2013-04-25 09:56:24

unity3D手機(jī)游戲引擎

2012-12-24 09:17:12

iOSUnity3D

2013-04-25 10:03:07

unity3D手機(jī)游戲引擎

2012-12-24 08:56:15

iOSUnity3D

2012-12-24 09:18:22

iOSUnity3D

2012-12-24 09:55:15

iOSUnity3D

2012-12-24 08:52:44

iOSUnity3D

2013-04-25 13:27:11

unity3D手機(jī)游戲引擎

2012-12-24 09:14:31

ios

2012-12-24 08:40:12

2012-12-24 08:51:23

iOSUnity3D

2013-06-14 09:54:04

Unity3D

2013-04-25 09:08:39

unity3D手機(jī)游戲引擎
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)