首先創建一個android工程,這個很簡單就不詳細說明了。然後打開Unity的安裝目錄,找到需要用的class.jar文件,就是封裝調用unity引擎的java源碼,位置在Unity\Editor\Data\PlaybackEngines\androidplayer\bin\classes.jar(安裝目錄),然後複製這個文件到android工程的libs目錄,系統會自動引用,adt22以下不記得會不會,如果不會的話需要自己設置一下,右鍵工程
添加這個文件即可。
然後把MainAtivity稍微改一下,就是把繼承父類改成UnityPlayerActivity,這樣就對接上了unity接口,源碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.lee.unityandroid; import android.os.Bundle; import android.widget.RelativeLayout; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout layout = (RelativeLayout) findViewById(R.id.parent_layout); layout.addView(mUnityPlayer.getView()); } } |
爲了顯明觀察顯示,佈局稍微改動了一下。把這個顯示在我們的視圖上。
activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<RelativeLayout
android:id="@+id/parent_layout"
android:layout_width="300dp"
android:layout_height="500dp"
android:layout_centerInParent="true"
>
</RelativeLayout>
</RelativeLayout>
|
配置清單文件,這個裏面的包名要用到後面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 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.lee.unityandroid" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.lee.unityandroid.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> </application> </manifest> |
android基本上就完成了。現在創建一個Unity工程,名字啥的隨便取,然後在菜單File->Build Settings->Android->Player Settings
最後生成的APK文件我們直接解壓,把裏面的assets目錄下面的data目錄複製到我們工程的assets目錄下,然後把lib目錄下的armeabi-v7a或armeabi一起復制(如果都有的話,只有其中一個就複製一個即可),最後編譯我們的程序,運行效果如下:
白色是我們的佈局容器,藍色就是unity視圖內容了。
下面繼續說下在Unity中調用Andriod的函數,在Unity工程中創建一個C#腳本,直接將它綁定在攝像機中,它用來通知界面打開Activity。如下圖所示,利用GUI在屏幕中創建兩個按鈕,點擊按鈕打開不同的Activity。
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
|
using
UnityEngine;
using
System.Collections;
public
class
Test
:
MonoBehaviour
{
//
Update is called once per frame
void
Update
()
{
//當用戶按下手機的返回鍵或home鍵退出遊戲
if
(Input.GetKeyDown(KeyCode.Escape)
¦¦
Input.GetKeyDown(KeyCode.Home)
)
{
Application.Quit();
}
}
void
OnGUI()
{
if(GUILayout.Button("OPEN
Activity01",GUILayout.Height(100)))
{
//註釋1
AndroidJavaClass
jc
=
new
AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject
jo
=
jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("Method01","第一個方法");
}
if(GUILayout.Button("OPEN
Activity02",GUILayout.Height(100)))
{
AndroidJavaClass
jc
=
new
AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject
jo
=
jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("Method02","第二個方法");
}
}
}
|