unity調用Android功能

來源:互聯網
上載者:User

標籤:

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功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.