1) Unity3D可调用Android Java函数(在.jar中)
2) Java可调用Unity3D函数
3) Unity3D可调用Android C函数(在.so中)
1) Unity5.0
2) JDK: jdk-8u25-windows-i586
3) Android SDK
4) Eclipse : adt-bundle-windows-x86中自带的
第一步:
第二步:
第三步:
第四步: Configure Laucher Icon,不做任何修改,不要把你的Image File在这儿加入,它会强行修改Image File的尺寸,在后面把它直接放入res/drawable即可。
第五步:
第六步:Blank Activity采用默认值即可。
第七步:删除下面红色标记部分
注:若其基类不是Activity,则在左边PlugInTest上点右键,然后选择Properties,进入如下界面:
C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\com\unity3d\player)
2) classes.jar位于:C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin,其导入方法如下图所示:
把自己制作的ic_launcher.png覆盖res/drawable-xxx目录中的ic_launcher.png
package com.example.plugintest; import android.app.Activity; import android.os.Bundle; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } // only for test, C# in unity will call it public int GetInt(){ return 1000; } }
1) 进入PlugInTest的Properties中,并勾选“Is Library”
2) Project->Clean
3) Project->Build Project
4) 生成的plugintest.jar见bin目录
把以下内容都于Unity Project的“Assets\Plugins\Android”目录中。
1)bin目录下的plugintest.jar
2)bin目录下的AndroidManifest.xml (可根据需要增加其它的Activity或权限)
3) 整个res目录
其结果在Unity Project如下图:
using UnityEngine; using System.Collections; public class AndroidTest : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); Debug.Log("*********JerryTest*********" + jo.Call<int>("GetInt")); } }
UnityEngine.AndroidJavaClass与java.lang.Class及其子类对应。
UnityEngine.AndroidJavaObject与java.lang.Object及其子类对应。
File->Build Run
当导出apk时,可能遇到下面的问题:
Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.
需在AndroidManifest中增加一行:<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.toltech.game.doubleboats" android:versionCode="1" android:versionName="1.0" > <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true"/> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> <activity android:name="com.example.plguintest.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application> </manifest>
对于Android平台(armv7,x86)的Native Plugin, lib*.so应放于以下目录中:
1) X86平台: Assets/Plugins/Android/libs/x86/
2) armv7平台:Assets/Plugins/Android/libs/armeabi-v7a/
参考:http://docs.unity3d.com/Manual/PluginsForAndroid.html