20161125 unity-android連携の発表資料

32
2016/11/25 UnityAndroid nativeの機能を使う⽅法の勘所

Upload: wheettweet

Post on 06-Jan-2017

890 views

Category:

Technology


0 download

TRANSCRIPT

�2016/11/25

UnityでAndroid nativeの機能を使う⽅法の勘所

⾃⼰紹介・VR/MRアプリ開発者・Microsoft MVP for Visual Studio and

Development Technologies・⽇本初?のUnity Certified Developer

Androidアプリの代表作(友達と第1章まで作ってpending..)

WaterFall : システムエンジニアが主⼈公のビジュアルノベル

⽬次1. UnityでAndroidの機能を呼び出すには?

2. Hello World的な呼び出し⽅

3. 「Hello World」を越えるには?

4. 実装Tips、その他

5. まとめ

1. UnityでAndroidの機能を呼び出すには?

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. Hello World的な呼び出し⽅

2-1. Android Studioの基礎知識・Gradleというビルドシステムを使う

・ApplicationとModuleのどちらかを作ることができる

Application : 従来のapk形式のアプリケーション

Module : 他から呼び出すために機能をまとめたもの

Unityで使うには、Module化するとよい

2-2. Android Studio側の準備 (1/5)新規プロジェクトを作成し、Android Libraryを選択

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

最初、これで解決!と思いました。しかし、、

これだけだと、Android Studio向けに提供されたサンプルコードをUnityで使うことができない!(場合が多い)

3. 「Hello World」を越えるには?

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-2. どうすればよいか?・⽇本、海外のサイト(例:StackOverFlow)を⾒たが、いまいち情報がない。

(シンプルな例に関する情報しか出てこない)

⾃分でノウハウを⾒つける!

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. 実装Tips、その他

http://magicbullet.hatenablog.jp/entry/UnityAndroid-plugin3

ブログにて更新中!

4-1. 実装 Tips

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. その他 (2/3)Githubで公開しました。

ソースコード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

詳細⼿順

5. まとめ

5. まとめ・UnityでAndroid Nativeの機能を使う⽅法を紹介

・シンプルな使い⽅を越えるためのノウハウを紹介

・⼀例として、MicrosoftのBing Speech API(Android版)をUnityで使えるようにしたサンプルを紹介