標籤:
Unity需要調用Android的功能主要涉及兩種方式,一種是使用Android的外掛程式,另一種是匯出為GoogleAndroid 工程,進行處理。用途是使用第三方的外掛程式 或者 接入渠道的SDK。
1:使用Android的外掛程式處理。
具體過程,搜尋引擎有很多結果,不再贅述。
主要要注意: 匯出的jar的時候直接使用Eclipse中的export選項,選擇src中的所有以及gen中的R.java即可。另外unity-classes.jar不需要再次包含。
當需要同時使用多個外掛程式的時候:
AndroidManifest 中只能設定一個MainActivity,那麼另一個外掛程式的activity可以採用以下方式啟動。
Untiy C#
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass jc2 = new AndroidJavaClass("com.foo.bar.Start");
jc2.CallStatic("StartIntent",jo);
Android Java
Class Start
{
public static void StartIntent(Activity main)
{
Intent intent = new Intent(main,AnotherMain.class)
main.StartActivtiy(intent);
}
}
//另一個外掛程式的main activity
Class AnotherMain extends Activity
{
//...
}
2:匯出為GoogleAndroid Project
projectSettings 中設定為匯出android工程,匯出後用Eclipse開啟即可。
匯出後src下有3個檔案。
UnityPlayerAcitivity,UnityPlayerProxyActivity,UnityPlayerNativeActivtiy
前兩個類都是不再使用了,直接繼承自 UnityPlayerNativeActivity,在UnityPlayerProxyActivity中直接啟動UnityPlayerNativeActivity.
都是讓使用者直接使用UtniyPlayerNativeActivity。
我的理解是使用者的類繼承自其中之一才能被AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 所獲得。
官方的文檔是要求繼承自UnityPlayerActivity。
但是UnityPlayerActvtiy 其實有2份,一份在unity-classes.jar中,另一份就是src中。繼承任何一份都可以使用。
差別就在於如果你需要接的sdk中包含有懸浮窗之類的工具時,繼承自jar包中的無法修改,繼承自src中的可以將
UnityPlayerNativeActivtiy extends NativeActivity
改為
UnityPlayerNativeActivtiy extends Activity 來使得懸浮窗可以獲得點擊事件。
另外修改AndroidManifest MainActivity(android.intent.action.MAIN)為自己需要的activity。匯出時預設為UntiyPlayerNativtiActivtiy。
發現的問題:
用Eclipse運行或者打包安裝程式apk時,在unity c#代碼中的
#if UNTIY_EDITOR 是成立的。也就是說。需要把android執行的相關代碼直接寫而不是放在宏定義中。
我就是使用了 #if UNITY_EDITOR
#else
#endif 跳了坑。 這點待更新。
其實兩種方式差別不是很大,可能寫外掛程式前者方便,接sdk後者方便。unity 調用 android 如果是static方法可以直接new class 然後callStatic,否則只能繼承自UntiyPlayerActivity 來做。
Android調用Untiy使用 UnityPlayer.UnitySendMessage("GameObjectName","MethodName", "args");
三個參數分別是 指令碼所在的物體名,方法名,參數。 unity處理。
public void MethodName(string message)
{
//to-do
}
unity調用Android功能