web-dev-qa-db-ja.com

androidとのUnity3d統合

Unity3d(アニメーションなど)およびAndroidSDK(androidSDKでJava、マニフェスト、リソースで記述されたアクティビティがほとんどない)で記述された部分で構成されるAndroidアプリケーションを作成する必要があります)

実際、私はすでにそれらの部分を持っています(少なくともmocksはready =です))そして、それらの間で通信する方法がわかりません。

私はunity3d Android統合(主に「プラグイン」と呼ばれるものについて))について多くの記事を読みましたが、このスタッフの仕組みを理解できませんでした=(私が理解した主なものそれについて書いた)プラグインに関するドキュメントが非常に貧弱であるということです... =)

私が理解できる唯一の通信方法は、unity3dスクリプト(AndroidJavaClassとAndroidJavaObjectを使用)からインテント(ブロードキャスト)を作成し、アクティビティ(Javaで記述)で処理できるようにすることです。しかし、何かが最善の解決策ではないことを教えてくれます...

私が問題について読んだことは、JNIを使​​用する必要があるということです(これはJavaネイティブインターフェイス-なぜ?!?-なぜネイティブコードを使用する必要があるのですか?)

Javaの目的は私のJavaアクティビティと通信し、AndroidNDKを使用してコンパイルし、Unity3dプロジェクトに含めることです。プラグインとして?その中間層をどのように書くことができますか?基本クラスとして "Activity"の代わりにUnityPlayerを使用する必要がありますか?その理由は?

47
leshka

Here is a tutorial on the basics of running Unity inside of a normal Android app.

Android Views 内でUnityを実行する)に素晴らしいチュートリアルがあります。これを実行したら、アプリのどこにでも簡単にシーンの埋め込みを開始できます。

UnityからJava Androidアプリを呼び出す必要がある場合、このコードを追加できます。

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

そして、アクティビティAndroidJavaObjectを使用して、アクティビティで必要なメソッドを呼び出すことができます。このようなもの:

activity.Call("yourFunctionName", parameters);
36
spatulamania

Androidで完全にサポートするために、Javaで中間レベルのコードを作成する必要はありません。

代わりに、次のことを行う必要があります。

  1. Android SDKでLibプロジェクトを作成します。
  2. 1つのメインアクティビティを作成してUnityPlayerActivityを拡張します
  3. 必要な他のアクティビティを作成し、マニフェストに追加します。
  4. リソース、レイアウトを作成…
  5. JARにエクスポートし、すべてのJAR、リソースファイルをAssets/Plugins/Androidフォルダーにコピーして、Unityに追加します。

この方法は、プッシュ通知の作成、アプリの請求などに役立ちます。

参照番号: http://docs.unity3d.com/Documentation/Manual/PluginsForAndroid.html (-> UnityPlayerActivityの拡張Javaコード)

さらに、以下のコードを使用して:

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
activity.Call("yourFunctionName", parameters);

UnityでAndroidを使用すると、ほとんどの魔法のことを実行できます

注*:yourFunctionNameは、UnityPlayerActivityから拡張されるメインアクティビティ内に実装する必要があります(ステップ2を参照)

よろしく、

7
Frank Nguyen