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

Unity3D研究之打開Activity與調用Java代碼傳遞參數

移動開發(fā) iOS 游戲開發(fā)
Unity for Android 比較特殊,Unity for IOS 打包是將XCODE工程直接交給開發(fā)者,開發(fā)者可以在工程的基礎上繼續(xù)添加新的視圖,最后由開發(fā)者自行打包生成IPA包,發(fā)布程序

 Unity for Android 比較特殊,Unity for IOS 打包是將XCODE工程直接交給開發(fā)者,開發(fā)者可以在工程的基礎上繼續(xù)添加新的視圖,***由開發(fā)者自行打包生成IPA包,發(fā)布程序。而Unity for Android打包直接生成APK包,等于說源代碼開發(fā)者是看不到的,但是Unity的自身確實有些局限,針對Android平臺我們需要學習如何在 Unity中調用Android的JAVA代碼。本章我們的目標是使用Unity的腳本打開Activity。首先我們創(chuàng)建一個普通的Android工程,目錄結構如下圖所示。

因為項目需要使用Unity提供的接口,所以需要將接口classes.jar引入至當前工程但中。接口包的所在地,打開Finder->應用程序->Unity->點擊Unity圖標,鼠標右鍵選擇“顯示包內容”->Contents->PlaybackEngines->AndroidPlayer->bin->classes.jar 。接口包引入工程后,開始編寫JAVA代碼。

UnityTestActivity.java

[代碼]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     public void StartActivity0(String name)
20     {
21         Intent intent = new Intent(mContext,TestActivity0.class);
22         intent.putExtra("name", name);
23         this.startActivity(intent);
24     }
25  
26     public void StartActivity1(String name)
27     {
28         Intent intent = new Intent(mContext,TestActivity1.class);
29         intent.putExtra("name", name);
30         this.startActivity(intent);
31     }
32 }

 UnityTestActivity是主Activity,Unity程序一起動就會調用這個Activity,它是在 AndroidManifest.xml中配置的。它需要繼承UnityPlayerActivity,然而它就是剛剛我們引入的classes.jar 包中提供的接口類。UnityTestActivity對外提供了兩個方法接口,StartActivity0(String name) 方法與StartActivity1(String name)方法,這兩個方法是在Unity中使用C#腳本調用的,意思是調用后程序將打開一個新的Activity,參數name也是由C#腳本傳遞過來的,接著將傳遞的String參數繼續(xù)傳遞給新打開的Activity。

TestActivity0.java

[代碼]java代碼:

01 package com.xys;
02  
03 import android.app.Activity;
04 import android.os.Bundle;
05 import android.view.View;
06 import android.view.View.OnClickListener;
07 import android.widget.Button;
08 import android.widget.TextView;
09  
10 public class TestActivity0 extends Activity {
11     /** Called when the activity is first created. */
12     @Override
13     public void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.main);
16  
17         TextView text = (TextView)this.findViewById(R.id.textView1);
18         text.setText(this.getIntent().getStringExtra("name"));
19  
20         Button close = (Button)this.findViewById(R.id.button0);
21         close.setOnClickListener(new OnClickListener() {
22  
23             @Override
24             public void onClick(View v) {
25  
26                 TestActivity0.this.finish();
27             }
28         });
29     }
30  
31 }

TestActivity1.java

[代碼]java代碼:

01 package com.xys;
02  
03 import android.app.Activity;
04 import android.os.Bundle;
05 import android.view.View;
06 import android.view.View.OnClickListener;
07 import android.widget.Button;
08 import android.widget.TextView;
09  
10 public class TestActivity1 extends Activity {
11     /** Called when the activity is first created. */
12     @Override
13     public void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.main);
16  
17         TextView text = (TextView)this.findViewById(R.id.textView1);
18         text.setText(this.getIntent().getStringExtra("name"));
19  
20         Button close = (Button)this.findViewById(R.id.button0);
21         close.setOnClickListener(new OnClickListener() {
22  
23             @Override
24             public void onClick(View v) {
25  
26                 TestActivity1.this.finish();
27             }
28         });
29     }
30  
31     public void Start()
32     {
33  
34     }
35  
36 }

使用this.getIntent().getStringExtra(“name”)方法,得到上個界面?zhèn)鬟f過來的字符串,并且顯示在屏幕中,用于區(qū)分新打開的Activity。TestActivity0 與TestActivity1是兩個新打開的Activity,它們屬于Unity程序的子Activity所以它不需要繼承 UnityPlayerActivity,直接繼承Activity即可,在代碼中監(jiān)聽了一個按鈕,意思是點擊按鈕后關閉當前的Activity。

接著是代碼中打開的一個布局文件,這個應該沒什問題,學過Android開發(fā)的朋友應該都能看懂,我就不詳細解釋了。

main.xml

[代碼]xml代碼:

01 <?xml version="1.0" encoding="utf-8"?>
02 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/screen"
03     android:layout_width="fill_parent" android:layout_height="fill_parent"
04     android:orientation="vertical">
05     <LinearLayout
06         android:layout_width="fill_parent" android:layout_height="fill_parent"
07         android:orientation="vertical">
08         <ImageView
09          android:src="@drawable/jay"
10          android:layout_width="fill_parent"
11          android:layout_height="fill_parent"
12         />
13        <TextView android:id="@+id/textView0"
14               android:layout_width="fill_parent"
15               android:layout_height="wrap_content"
16               android:textColor="#000000"
17               android:textSize="18dip"
18               android:background="#00FF00"
19               android:text="雨松MOMO 帶你走進Unity for Android的世界"
20               android:gravity="center_vertical|center_horizontal"
21         />
22          <TextView android:id="@+id/textView1"
23               android:layout_width="fill_parent"
24               android:layout_height="wrap_content"
25               android:textColor="#FFFFFF"
26               android:textSize="18dip"
27               android:background="#0000FF"
28               android:text="Unity與Android之間的交互"
29               android:gravity="center_vertical|center_horizontal"
30               />
31         <Button android:id="@+id/button0"
32             android:layout_width="fill_parent" android:layout_height="wrap_content"
33             android:text="關閉這個Activity"/>
34     </LinearLayout>
35 </ScrollView>

***是本程序的AndroidManisest.xml,這個很重要,一定要配置。

[代碼]xml代碼:

01 <?xml version="1.0" encoding="utf-8"?>
02 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
03     package="com.xys"
04     android:versionCode="1"
05     android:versionName="1.0" >
06  
07     <uses-sdk android:minSdkVersion="7" />
08     <application
09         android:icon="@drawable/ic_launcher"
10         android:label="@string/app_name" >
11         <activity
12             android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
13             android:name=".UnityTestActivity"
14             android:label="@string/app_name" >
15             <intent-filter>
16                 <action android:name="android.intent.action.MAIN" />
17                 <category android:name="android.intent.category.LAUNCHER" />
18             </intent-filter>
19         </activity>
20  
21         <activity
22             android:name=".TestActivity0"
23             android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
24             >
25         </activity>
26  
27         <activity
28             android:name=".TestActivity1"
29             android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
30             >
31         </activity>
32     </application>
33  
34 </manifest>

大家請看清楚,這里一共配置了代碼中的三個Activity,并且標志UnityTestActivity為主Activity。另外繼承了 UnityPlayerActivity后在Eclipse是運行不了的,除非拿到Unity中在真機下才行,請大家繼續(xù)認真閱讀本篇博文。

OK,到這里Android的代碼已經寫完,下面我們學習如何在Unity中去調用它。首先Build一下當前的Eclipse工程,代碼所有的.class文件都生成在了Android工程的bin文件夾中,當前工程的路徑是 UnityTestActivity->bin->classes->com->xys->你的.class文件。下面需要對這些.class文件進行打包,蘋果系統的話打開電腦的終端,cd到classes文件夾的目錄下,接著執(zhí)行代碼

[代碼]java代碼:

1 jar -cvf class.jar *

 這行代碼的意思是把當前目錄下的所有.class文件打包成.jar文件,保存文件名稱為class.jar。接著class.jar文件就生成在 bin->classes->目錄中了。如下圖所示,請大家仔細看一下解開的包應該與你的Android對應的包名保持一致,我的包名是 com.xys,所以文件夾就是class->com->xys->.class代碼。

 確保無誤后,請大家開始創(chuàng)建Unity工程。如下圖所示,Unity工程中文件夾的結構如下,Plugins->Android的名稱不能修改,必需保持一致。接著把Eclipse中Android的工程文件拷貝至這里,除了Android工程中的src文件夾,將其它文件夾全部拷貝至 Plugins->Android文件夾中。***在Plugins->Android文件夾中創(chuàng)建bin文件夾,然后將剛剛生成的.jar文件拷貝進來,jar的名稱可以隨便修改,但是jar包里面必須是com->xys->你的class文件,否則運行程序后提示找不到類文件。

***在Unity工程中創(chuàng)建一個C#腳本,就是上圖中的Test.cs,直接將它綁定在攝像機中,它用來通知界面打開Activity。如下圖所示,利用GUI在屏幕中創(chuàng)建兩個按鈕,點擊按鈕打開不同的Activity。

[[106613]]

Test.cs

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

01 using UnityEngine;
02 using System.Collections;
03  
04 public class Test : MonoBehaviour
05 {
06  
07     // Update is called once per frame
08     void Update ()
09     {
10         //當用戶按下手機的返回鍵或home鍵退出游戲
11         if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) )
12         {
13             Application.Quit();
14         }
15     }
16  
17     void OnGUI()
18     {
19         if(GUILayout.Button("OPEN Activity01",GUILayout.Height(100)))
20         {
21             //注釋1
22              AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
23              AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
24              jo.Call("StartActivity0","***個Activity");
25         }
26         if(GUILayout.Button("OPEN Activity02",GUILayout.Height(100)))
27         {
28              AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
29              AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
30              jo.Call("StartActivity1","第二個Activit");
31         }
32     }
33  
34 }

注釋1:先得到AndroidJavaClass,然后得到AndroidjavaObject就是當前Activity的對象,也就是我們在上面創(chuàng)建的主UnityTestActivity.JAVA。拿到它的對象后調用jo.Call()參數1表示調用UnityTestActivity.JAVA類中的方法名稱,參數2表示該方法傳遞過去的參數。如下圖所示:“***個Activity”與“第二個Activit”就是我在C#中傳遞過去的字符串。

 

在打開的Activity中點擊“關閉這個Activity按鈕”,程序將繼續(xù)回到原來的界面。

[[106615]]

***大家一定要注意Unity中的包名,要和Android工程保持一致,否則無法調用。如下圖所示,Bundle Identifier* 當前項目為com.xys 。另外其它的選項也在其中,請大家仔細閱讀。

另外請大家繼續(xù)關注的程序界面專欄

這篇文章的源碼我找不到了,但是我找到下一篇文章的源碼,  不過內容都是差不多了,下一篇增加了anroid 向Unity發(fā)送消息。

責任編輯:冰凝兒
相關推薦

2012-12-24 09:09:27

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:20:48

AndoidUnity3D

2012-12-24 09:19:31

iOSUnity3D

2013-04-25 09:56:24

unity3D手機游戲引擎

2012-12-24 09:17:12

iOSUnity3D

2013-04-25 10:03:07

unity3D手機游戲引擎

2012-12-24 09:18:22

iOSUnity3D

2012-12-24 09:55:15

iOSUnity3D

2012-12-24 08:52:44

iOSUnity3D

2012-12-24 09:14:31

ios

2013-04-25 13:27:11

unity3D手機游戲引擎

2012-12-24 08:40:12

2012-12-24 08:51:23

iOSUnity3D

2013-04-25 09:08:39

unity3D手機游戲引擎

2013-04-09 13:42:23

Unity3D基礎知識梳理

2013-06-14 09:54:04

Unity3D

2012-12-24 08:46:50

iOSUnity3D
點贊
收藏

51CTO技術棧公眾號