⾃⼰紹介・VR/MRアプリ開発者・Microsoft MVP for Visual Studio and
Development Technologies・⽇本初?のUnity Certified Developer
1-1. はじめに
Unityでは、OS固有の基本機能については、共通APIで使えるようにしている。
例:Input.Gyroで、iOSでもAndroidでもジャイロセンサが使える
しかし、それ以外の機能はAPIが準備されていないので、⾃分で作る必要がある。
1-2. 「それ以外の機能」とは?
例・Android Studio⽤でしか提供されていない機能
・⾃社で作った専⽤機能
それらのJavaベースの機能を使うために、UnityではNative Pluginという仕組みがある。
1-3. Native Pluginとは?
Unityが持つ、OS Nativeの機能を呼び出す仕組み
iOSやAndroid nativeのメソッド呼び出しや、
native 側からのコールバックを受けることができる。Unity C#
Java
Unityで作ったapk
メソッド呼び出し コールバック
2-1. Android Studioの基礎知識・Gradleというビルドシステムを使う
・ApplicationとModuleのどちらかを作ることができる
Application : 従来のapk形式のアプリケーション
Module : 他から呼び出すために機能をまとめたもの
Unityで使うには、Module化するとよい
2-2. Android Studio側の準備 (2/5)・Unityのライブラリ “classes.jar”をインポート
Macの場合/アプリケーション/Unity/PlaybackEngine/AndroidPlayer/Variations/mono/Release/Classes/classes.jar
Windowsの場合C:¥Program Files¥Unity¥Editor¥Data/PlaybackEngines/AndroidPlayer/Varitations/mono/Release/Classes/classes.jar
2-2. Android Studio側の準備 (3/5)・build.gradleを修正
https://gist.github.com/flushpot1125/4d8aba4519264552b097807fb041a2cf
ソースコードの依存関係にclasses.jarを追加
ビルド対象からclasses.jarを除く(同⼀名称の重複を避けるため)
2-2. Android Studio側の準備 (4/5)・ソースコードを記述
Unity側にコールバックしたいメソッドは独⾃ルールに従って書く
https://gist.github.com/flushpot1125/084d8d4a6cb21d80ee96273130d3a6ca
専⽤のAPI Unity側のobject名
Unity側のメソッド名, 引数
2-2. Android Studio側の準備 (5/5)・gradleの⽂法に沿ってビルド./gradlew :nativeplugin:clean :nativeplugin:assembleRelease
Module名 aar⽣成
・jarを取り出してUnityで使⽤Android Studioのプロジェクトトップ /module名 / build / indermediates / bundles / classes.jar
詳細⼿順、サンプルプロジェクトは下記を参照ください。http://magicbullet.hatenablog.jp/entry/UnityAndroid-plugin1
2-3. Unity側の準備・プロジェクトを作成・C#でソースコードを記述・Android側の呼びたいメソッドを、以下のように記述
https://gist.github.com/flushpot1125/0ea02351137df3906b8affef896841a6
Unityが提供しているクラスAndroid Studio側で宣⾔したクラス名
Android Studio側で宣⾔したメソッド名。public必須
詳細⼿順、サンプルプロジェクトは下記を参照ください。http://magicbullet.hatenablog.jp/entry/UnityAndroid-plugin2
2-4. 動作確認
Android Studio側で書いた⽂字列を、Unityで表⽰させることに成功!
Gifアニメです。Slideshareでは動かない可能性があります。その場合、下記の記事でご確認ください。http://magicbullet.hatenablog.jp/entry/http%3A//magicbullet_hatenablog_jp/entry/UnityAndroid-plugin2
3-1. 「Hello World」だけでは解決できないこと・先ほどの⽅法は最も基本的な使い⽅で、いわば「Hello World」
・しかし、Javaで書かれたサンプルコードをUnityで使おうとすると、「HelloWorld」だけでは対応できない例が多い。
Unity C#
Activityなしのjava
メソッド呼び出し
コールバック
Unity C#
Activityありのjava c/c++の.so Android
Manifest
シンプルな構成
? ?
Java,so,manifestに依存関係がある場合の構成
より複雑な対応が必要!
3-3. ノウハウ (1) Android Manifestファイルの変更Unity側のPlugins/Androidに配置し、必要な設定を追加。(例:permission)
Macの場合/アプリケーション/Unity/PlaybackEngine/AndroidPlayer/AndroidManifest.xml
Windowsの場合C:¥Program Files¥Unity¥Editor¥Data/PlaybackEngines/AndroidPlayer/AndroidManifest.xml
3-3. ノウハウ (2) C/C++ライブラリの追加拡張⼦soファイル(C/C++でビルドされたもの)がAndroid側にあるときは、下記のフォルダ構成を作って、armeabi-v7aフォルダに⼊れる。
ファイル名が変わると認識されないので注意!
3-3. ノウハウ (3) サービス化元々Activityがあって⾃⼰完結しているサンプルコードの場合、Bind Serviceという⽅法を使って、バックグラウンドで動かす。
Activity
その他ライブラリ
サンプルコードの構成
service
その他ライブラリ
Unityで作る場合の構成
Unity C#
Bind Service
4-2. その他 (1/3)Cognitive ServiceのBing Speech API(⾳声認識)のAndroidサンプルをUnityで使えるようにしてみました。
https://azure.microsoft.com/ja-jp/services/cognitive-services/speech/
ソースコードhttps://github.com/flushpot1125/CognitiveSpeech-STT-Android_Unity
4-2. その他 (3/3)
Android Studio側の⼿順http://magicbullet.hatenablog.jp/entry/UnityAndroid-plugin4-1
Unity側の⼿順http://magicbullet.hatenablog.jp/entry/UnityAndroid-plugin4-2
Cognitive Service概要、登録⽅法http://magicbullet.hatenablog.jp/entry/CognitiveService_BingSpeechAPI
詳細⼿順