unity與Android之間的交互


  這段時間在研究嵌入sdk,途中遇到不少問題和坑,在這就不一一說了。嵌入sdk是比較常見的吧,如接入廣告啊,新浪的分享...... 這些都需要接入sdk的。(這些我在這段時間都應以研究成功了,后期會寫上)。現在我們從最基本的做吧。  其實這些和什么引擎都是沒多大關系的。不管是unity,還是cosos2d......  說白了,這些就是和移動平台有關系。ios,android,wp8啊。

 

   如果你不熟悉android,沒關系,即使你是從未打開過eclipse都可以,因為我把詳細步驟給以圖片的方式展示出來。現在我們就從最基本的做起吧。主要是實現在unity中去調android的方法。其實這個很簡單,只是為了從未接觸過安卓的人才弄的這樣詳細。(我以前沒接觸過安卓,當時多么希望能有一份這樣的教程教導我啊。)

 

1.   打開eclipse,新建一個安卓的工程。

 

在這里要注意我們的包名,和最低的sdk,包名的話我們在unity中導出的時候需要用到。至於最低的sdk就是一個兼容問題了,如果我們選4.0一下的話,那當我們在unity導出的時候會報錯誤的。我在這坑了很久很久,最后才發現一系列的錯誤是這個因起來的。最好是要在32位的sdk,jdk中進行吧,這樣會少很多莫名的錯誤問題, 注意的就是我在下圖圈起來的地方。

 

我們一直狂點下一步,當我們看見這個時,就是最后一步了。

 

如果大家都沒錯,創建的新工程就是如下一樣了。我圈起來的地方多是會用到了,需要注意的地方。



2.現在我們安卓工程創建好了,就到了開始編寫的時候了。我們打開該目錄


D:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\bin

找到class.jar 。這個是unity幫我們封裝好了的jar包,我們要用到該包。

 

然后我們將class.jar,放進我們的安卓工程去。直接拖進libs目錄就可以。如圖

 

現在我們來引用下吧,選中它,右鍵.......... 如下:



3.好了,現在我們把重要的都加進來了,那我們現在就來做個簡單的實驗,就是點擊unity中德按鈕,打開一個安卓的ACtivity吧。我們首先要做的就是把這個Activity布局。我們在res--layout文件夾下找到activity_main打開,加入這些內容:


<?xml version="1.0" encoding="utf-8"?><ScrollView   xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/container"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.ITFFuture.testua.MainActivity"    tools:ignore="MergeRootFrame" >    <LinearLayout        android:layout_width="fill_parent"         android:layout_height="wrap_content"        androidrientation="vertical">              <TextView android:id="@+id/textView0"              android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:textColor="#000000"              android:textSize="18sp"              android:background="#00FF00"              android:text="測試Unity f和 Android之間額通訊"              android:gravity="center_vertical|center_horizontal"        />         <TextView android:id="@+id/textView1"              android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:textColor="#FFFFFF"              android:textSize="18sp"              android:background="#0000FF"              android:text="大家好,我是安卓的Activity"              android:gravity="center_vertical|center_horizontal"              />        <Button android:id="@+id/button0"            android:layout_width="fill_parent"             android:layout_height="wrap_content"            android:text="關閉這個Activity"/>    </LinearLayout>    </ScrollView>

我們的內容轉成實際界面是這樣的樣子。

 

現在我們來新建一個Class,取名為OpenActivity1,如圖:

 

然后我們接入代碼,代碼內容如下:


package com.ITFFuture.testua;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class OpenActivity1 extends Activity {   /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView text = (TextView)this.findViewById(R.id.textView1);        text.setText(this.getIntent().getStringExtra("name"));        Button close = (Button)this.findViewById(R.id.button0);        close.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                OpenActivity1.this.finish();            }        });    }}

這個代碼很簡單,,改變中間的字母內容,是點擊關閉按鈕,關閉此Activity.最終效果如下:



好了,現在我們在MainActivity中謝方法吧,這個Activity就相當於第一個場景。 MainActivity的內容:


package com.ITFFuture.testua;import com.unity3d.player.UnityPlayerActivity;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;public class MainActivity extends UnityPlayerActivity {    Activity mActivity=null;    Context mContext null;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mActivity=this;        mContext this;           StartActivity1("我是通過安卓中顯示的Activity");                }        public void StartActivity1(String name)    {                // TODO Auto-generated method stub        Intent intent = newIntent(mContext,OpenActivity1.class);        intent.putExtra("name", name);        mActivity.startActivity(intent);    }}

還有最后一點,要配置AndroidManifest.xml.聲明我們定義的Activity.


<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.ITFFuture.testua"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="14"        android:targetSdkVersion="17" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.ITFFuture.testua.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>                 <activity            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"            android:name=".OpenActivity1">        </activity>                     </application></manifest>

我們主要是聲明了我們自己的Avtivity,這個很重要,在后期加入廣告啊,新浪微博分享愛啊....

 

 

好了,那我們最終來導出jar包吧。在導出之前還是先刷新下(F5),和Build 下Project.

 

我們現在來導出吧。
1.   



2.



3.

 

現在我們的jar包已經成功導出了。是這樣子的
我們在安卓中的所有操作也就完成了哈,現在接下來的就是如何和unity進行互通了。

 

3.從unity中去調用
在unity中,我們新建一個Plugins文件夾,Plugins下面又建Android文件夾,Android文件夾下再建一個bin文件夾,我們將我們導出的jar包放進這個文件夾下,然后我們在eclipse中的res文件復制一份放入Android。也要把AndroidManifest.xml放進Android目錄下。詳細情況如下:

 

現在我們新建一個腳本吧。用來調用安卓中那個StartActivity1方法。

using UnityEngine;using System.Collections;public class Test : MonoBehaviour{    // Update is called once per frame    void Update()    {                if(Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) || Input.GetKeyDown(KeyCode.Menu))        {            Application.Quit();        }    }    void OnGUI()    {        if (GUILayout.Button("Open Activity", GUILayout.Height(80)))        {            AndroidJavaClass jc newAndroidJavaClass("com.unity3d.player.UnityPlayer");            AndroidJavaObject jo = jc.Get<AndroidJavaObject>("currentActivity");            jo.Call("StartActivity1""Unity中調出android的方法了");        }    }}

最后我們導出apk吧。在其中要設置一項。就是包名。這個要和安卓工程的包名一模一樣哦。

 

然后我們運行下吧。
在剛開始的時候我們會看安卓中德Activity,然后我們點擊關閉按鈕,就能看那Unity的Scene了。這個是我們點擊Open Activity這個按鈕時候,安卓中的Activity又被我們打開了。

 

好了,測試成功!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM