今回と次回でAndroidWearとUnityを連携させる方法を紹介します。
最終的にはCardboardSDK for Unity使って、CardboardアプリをAndroidWearで操作できるようにしたいのですが、ブログで紹介するのは連携させるところまでです。
続きは7/18(土)のAndroidWearハッカソンでやろうと思ってます。
皆さんにも体験してもらえるようにCardboardもいっぱい持っていくので、興味がある方は、ぜひ参加してくださいね!
http://goo.gl/forms/hEq7Pch3fy
今回の前編では、Android側の実装の説明をします。
■環境
- Windows 8.1
- AndroidStudio 1.3
- Unity 5.1.0f3
■Android側の実装
1.概要
2.プロジェクト作成
3.UnityのLibrary追加
4.MessageAPIを使って、Wearからタッチ情報を受け取る
5.Serviceの起動、停止
6.jarファイルの作成
参考サイト
1.概要
Mobile(HandHeld)の方はServiceだけ実装し、jarにしてUnityで読み込むようにします。
このServiceはDataLayerAPIのMessageAPIを使って、Wearからタッチ情報を受け取るように実装します。
WearableListenerServiceを継承して実装してもOKです。
ソースは下記にあげています。
https://github.com/scarviz/TouchU
2.プロジェクト作成
New Projectで、Phone(Android 4.3(API Level 18)以上)とWearにチェックを入れて、Mobileは「Add No Activity」で、Wearは「Always on Wear Activity」で作ります。
Unityでゲームとかする時に、WearはAlways onの方が都合がいいので、「Always on Wear Activity」を選択しています。
3.UnityのLibrary追加
MobileにUnityのライブラリを追加します。
C:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin
にclasses.jarがあります。それをlibsフォルダ以下にコピーしてください。
そして、コピーしたclasses.jarを右クリックし、「Add As Library」を選択します。
4.MessageAPIを使って、Wearからタッチ情報を受け取る
WearでタッチしたときにHandHeldにMessageを投げるように実装します。
いつも通りGoogleApiClient、MessageListenerの実装してください。
AndroidManifestにmeta-dataも追加してくださいね。
ServiceのMessageListenerのonMessageReceivedでは、Unityにタッチされたことを通知するメソッドを実装しておきます。
下記のようにUnityPlayer.UnitySendMessageを呼んでください。またUnityの実装の時にも説明しますが、Unityで実装したコールバックメソッドを呼んでる処理になります。
第一引数がGameObject名、第二引数がコールバックメソッドのメソッド名、第三引数が返したいメッセージ(文字列)になります。
今回は、GameObject名はService起動時に設定するようにしようと思います。
TouchUService.java(119)
MessageApi.MessageListener mMessageListener = new MessageApi.MessageListener() { @Override public void onMessageReceived(MessageEvent messageEvent) { String path = messageEvent.getPath(); Log.d(TAG, "path:" + path); if (TextUtils.isEmpty(path)) { return; } // タッチイベント発生時 if (path.equals(PATH)) { // コールバックする UnityPlayer.UnitySendMessage(mGameObjName, CALLBACK_NM, ACTION_DOWN); } } };
5.Serviceの起動、停止
Serviceの起動、停止をUnityのActivityから行うように実装します。
※WearableListenerServiceを継承して実装している場合は不要と思います。
下記のようにUnityPlayer.currentActivityで、Unityで表示されている画面のActivityを取得します。
Activityが取得できれば、あとはいつも通りstartService、stopServiceを呼ぶだけですね。
TouchServiceCtrl.java
/** * サービスを起動する * * @param gameObjectNm */ public void startService(String gameObjectNm) { Log.d(TAG, "startService"); Activity activity = UnityPlayer.currentActivity; Context context = activity.getApplicationContext(); Intent intent = new Intent(context, TouchUService.class); intent.putExtra(TouchUService.KEY_GAME_OBJ_NM, gameObjectNm); activity.startService(intent); } /** * サービスを停止する */ public void stopService() { Log.d(TAG, "stopService"); Activity activity = UnityPlayer.currentActivity; Context context = activity.getApplicationContext(); activity.stopService(new Intent(context, TouchUService.class)); }
6.jarファイルの作成
Mobileのbuild.gradleを編集します。
※わかりづらい場合は、https://github.com/scarviz/TouchU/blob/master/mobile/build.gradle を参考にしてください。
applyplugin:'com.android.application'を
applyplugin:'com.android.library'
に変更。
defaultConfigから、applicationId、versionCode、versionNameを除去。
下記を追記。
//task to delete the old jar task deleteOldJar(type: Delete) { delete 'release/AndroidPlugin.jar' } //task to export contents as jar task exportJar(type: Copy) { from('build/intermediates/bundles/release/') into('release/') include('classes.jar') ///Rename the jar rename('classes.jar', 'AndroidPlugin.jar') } exportJar.dependsOn(deleteOldJar, build)
GradleProjectsからexportJarを実行してください。
releaseフォルダにAndroidPlugin.jarができていると思います。
次回はこのAndroidPlugin.jarをUnityに読み込ませて、Wearからのタッチ情報を取得するように実装します。
■参考サイト
Create An Android Plugin For Unity Using Android Studio
http://www.thegamecontriver.com/2015/04/android-plugin-unity-android-studio.html
0 件のコメント:
コメントを投稿