今回と次回で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 件のコメント:
コメントを投稿