ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】AssetStore版 FantomPlugin のセットアップ

【Unity】AssetStore版 FantomPlugin のセットアップ  


 お陰様でアセットストアのバージョンも1.8となり、初期の頃からするとかなりの数の機能を追加してしまったので、改めてセットアップや各機能の仕様、プレファブなどの使い方などを含めて少しずつ記事にしていこうと思う。また、以前書いた記事はどちらかというとプラグイン内部の Java コードを中心に解説しているので、これからは Unity での C# コードの例を中心に解説していこう。


 なお「アセットストア版」と「Google Drive 版」の違いは、元々私が個人的に公開していたのが「Google Drive 版」であり、「アセットストア版」は Unity Asset Store の提出要件に従って内容を置き換えたものになっている。例えばストア版はその要項に「解説は英語であること」「他者の素材は使わないこと(フリー素材等)」「"Plugins"など特殊なフォルダも提出フォルダにまとめて入れること」等があり、その辺りに修正が入れてある(素材も自作した)。しかし、基本的にコードの内容は変わらない



 また常に最新版は Google Drive に置いてあり、ストア版は英訳したり、素材を入れ替えたりした上で、提出→審査通過後にリリースされるので、だいたい2~5日ほど遅れる。だが、実質的には変わらないものと考えて良い(同梱されている素材は一般的に利用されているものであり、添付してあるドキュメントに従っていれば、他に利用しても構わない)。日本語のコメントが欲しい場合は「Google Drive版」を利用しても良いだろう。

>>プラグイン&サンプルをダウンロード
(Google Drive版 [Japanese only]。画面右上にあるダウンロードアイコンを押す)


(※) Unity 5.6.3p1 - 2018.1.8f1 / Windows10(x64) / Galaxy S7 Edge (Android 7.0) で確認



■プラグインのセットアップ

1.まずは Asset Store からパッケージをダウンロードしてプロジェクトにインポートしよう。私の環境だけかも知れないが、なぜかローカルに既にダウンロードされているキャッシュのせいで最新版にならないことがあるので、そういう場合はエクスプローラなどでローカルのHDDのパス「C:\Users\(ユーザ名)\AppData\Roaming\Unity\Asset Store-5.x」(バージョンによってフォルダ名は異なるかも)フォルダ以下にある「Fantom\ScriptingGUI\Android Native Dialogs and Functions Plugin.unitypackage」を削除すれば、強制的に最新版をダウンロードできるようになる(通常は更新されるハズなのだが…)。

Android Native Dialogs and Functions Plugin



2.インポートが終わったら、フォルダの構成を少し変更する必要がある。「FantomPlugin」フォルダを開くと配下に「Plugins」フォルダがあるが、これをドラッグ&ドロップで「Assets」の直下に移動しよう。この「Plugins」フォルダは特殊なフォルダであり、プラグインの実体(fantomPlugin.aar)やマニフェストファイル(AndroidManifest.xml)などが入っている。「FantomPlugin」フォルダにあるドキュメント「fantomPlugin_ReadMe_jp.txt」("_en" は英語版)にも書いて置いたので、上手く動作しなかったときなどは確認して欲しい。

●インポート直後の状態


●「Plugins」フォルダを「Assets」直下に配置しなおした状態


※アセットストア版は規定上1つのフォルダにまとめなくてはいけないため移動する必要があるが、「Google Drive 版」の場合ははじめから「Assets」直下にあるので移動の必要はない。



■デモのビルド

 動作確認のためにもここでデモをビルドしてみよう。プラグインを利用したアプリをビルドするにはいくつかの注意点がある。それは「"AndroidManifest.xml"の使用」と「要求 API Level」「必要なパーミッション」「画面回転の設定」などである。一度理解してしまえば、他のものでもだいたい同じなので、1つ1つやってみよう。



●「AndroidManifest.xml」を用意する

 プラグインの全ての機能を利用するには Unity デフォルトで使われるアクティビティ「UnityPlayerActivity」をオーバーライドした「FullPluginOnUnityPlayerActivity」(※このプラグイン用のアクティビティ)を使う必要がある。デモのマニフェストファイル「AndroidManifest_demo.xml」にはあらかじめ全ての機能が利用できるように設定されているので、これを [Ctrl + D] などで複製して「AndroidManifest.xml」にリネームして欲しい。デモの場合は「必要なパーミッション」「画面回転の設定」は設定されているのでこれで完了である。
(※) 独自のマニフェストを使ってビルドする場合「Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.」という警告が出るが、「デフォルトのUnityアクティビティが見つからない」「画面回転を自分で設定してね」という内容なので無視して良い。





●「要求 API Level」の設定

1.ファイルメニューから「File>Build Settings...」を開こう。ダイアログが出たら、「Platform」から「Android」を選択し、「Switch Platform」ボタンを押してプラットフォームを Android に切り替えよう。ボタンがグレーアウトしたら切り替え完了なので、そのまま「Player Settings...」ボタンを押して「PlayerSettings」を開いて欲しい。



2.「PlayerSettings」では「Other Settings」を開いて「Identification」の「Minimum API Level」を最低「Android 4.2 (Jelly Bean' (API Level 17)」に設定する必要がある。実際にはプラグインの機能によって要求される API Level があるので、それに合わせて変更して欲しい。ここでは簡略のため一番低い API Level にしている。デバイスの OS が必要 API Level を満たしてないときは機能は無視されるので注意しよう。



3.ついでに「Other Settings>Identification」では「Package Name」も設定しておこう。これはアプリの ID となるものなので、ユニークなものにする。名前の付け方などは公式のデベロッパーマニュアルを参照して欲しい(※「com.Company.ProductName」のままだとエラーが出てビルドできない)。

アプリケーション ID の設定



●シーンを追加してビルドする

 ここまでできたら、「Build Settings」のダイアログに戻り、「Scenes In Build」にビルドするシーンを追加しよう。ここではとりあえず「Assets/FantomPlugin/Demo/Scenes」(Google Drive版は「Assets/_Test/Scenes/」)直下にあるシーンを全てドラッグ&ドロップで追加してしまおう。「Build」(または「Build And Run」)ボタンでビルドして実機で色々な機能を試してみよう(権限許可がいくつか出るが、全て許可して下さい)。




(※) Unity2018.1.0~1.6 でビルド中にエラー「CommandInvokationFailure: Gradle build failed.~Cannot read packageName~」が出たときは以下の記事を参照して下さい(Unity2018.1.7 以降は Fix されてます)。
【Unity】Unity2018 でビルドエラー「CommandInvokationFailure: Gradle build failed.」が出る



■Android ビルドをもう少し詳しく

 ついでに、ここではもう少しつっこんだ Android ビルドの内容も解説しておこう。Android のアプリ(拡張子:.apk)にはマニフェストファイル(AndroidManifest.xml)と、そこに記述された起動アクティビティUnityPlayerActivity)が必要である(※あくまで Unity の場合。サービスのみのアプリなどは別の方法を用いる)。これらは通常のビルドの場合、Unity がデフォルトで用意してくれるので、自分で用意する必要はない。実際のファイルは Unity をインストールしたパスにあるのでエクスプローラなどで覗いてみるのも良いだろう。

(AndroidManifest.xml)
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Apk
(UnityPlayerActivity)
C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player に「UnityPlayerActivity.java
(※パスはユーザーによる)

 プラグインはこれらを拡張したものとなる(※他の方法もあるが、ここでは割愛。必要なら公式マニュアルを参照)。前述した「AndroidManifest.xml」の解説に加えて、いくつかの設定方法も書いておこう。

(デベロッパーマニュアル)
App Manifest Overview
AndroidManifest.xml

(※) 独自のマニフェストを使ってビルドする場合「Unable to find unity activity in manifest. You need to make sure orientation attribute is set to fullSensor manually.」という警告が出るが、「デフォルトのUnityアクティビティが見つからない」「画面回転を自分で設定してね」という内容なので無視して良い。

(※) Unity2018.1.0~1.6 でビルド中にエラー「CommandInvokationFailure: Gradle build failed.~」が出たときは以下の記事を参照して下さい(Unity2018.1.7 以降は Fix されてます)。
【Unity】Unity2018 でビルドエラー「CommandInvokationFailure: Gradle build failed.」が出る



●パーミッションの設定

 機能によってはパーミッション(権限)が必要になるものがある。デモをビルドして起動したとき、初回に出る「録音を許可」「ストレージアクセスの許可」「バイタルサインの取得許可」のように出てくるあれだ(ダイアログが出ない権限もある)。Unity をデフォルトで使っている分には自動的に付加してくれるが、プラグインなどでオーバーライドする場合は自分で設定して置かなければならないことも多いので、覚えておくと良いだろう。なお、権限が許可されてない機能を使おうとした場合、エラーが出たり無視されたりするので、基本的には使えるかどうかをはじめに1度で良いので確認した方が良い(※このプラグインの場合、だいたい「IsSupported~」というメソッドやプロパティが用意してある。「~Controller」を使う際は、起動時に自動的にチェックされる)。

 権限の設定に関しては「AndroidManifest.xml」に以下のように書く。例えば「録音許可」のパーミッションの場合、以下のようになる。

<uses-permission android:name="android.permission.RECORD_AUDIO" />

 これら権限は通常「<manifest>~</manifest>」タグの間に書く。普通はデモのときに利用した「AndroidManifest_demo.xml」のように先頭に書いた方が良いだろう。また、Google Play などでアプリをダウンロードする際にも要求される権限として表示されるので、必要のない権限は書かない方が良い。あまりに要求権限が多いとインストールを拒否られる確率も高くなるので最低限にすることを心がけよう。

 なお、このプラグインで各機能に対して必要な権限はインポートした「Plugins/Android/」フォルダに「Permission_ReadMe.txt」にまとめてある。「AndroidManifest_demo.xml」には全ての権限は入っているので、そこから必要なものだけコピペするのも良いだろう。

(デベロッパーマニュアル)
パーミッション



●センサー利用時のフィルタリング(Google Play)

 センサー利用においては権限要求とは別に、デバイスがそのセンサーを搭載しているか否かという問題もある。このプラグインの場合、搭載されてないセンサーは単純に無視されるが(これも「IsSupported~」メソッドでチェックし、「~Controller」で利用できない場合無視している)、Google Play においてはフィルタリングをして、そもそも使えない端末ではダウンロードさせないようにしておくと親切だろう。

 例えば「心拍センサー」を搭載してない機種をフィルタリングしたい場合、以下のように書く。

<uses-feature android:name="android.hardware.sensor.heart_rate" android:required="true" />

 これもパーミッション同様「<manifest>~</manifest>」タグの間に書く。センサーの文字列に関しては、デベロッパーマニュアルで各センサーの名前定義(Constant Value)を使えば良い。

(デベロッパーマニュアル)
Using Google Play filters to target specific sensor configurations
各センサーの名前定義(※Constant Value の文字列を使う)



●画面回転の設定

 画面回転(デバイスの縦置き、横置き)に関しては「AndroidManifest.xml」と Unity の PlayerSettings の両方を合わせておく必要がある。合ってない場合、意図した画面にならないことがあるので注意しよう。

 「AndroidManifest.xml」側での設定の場合、<activity>」タグの「android:screenOrientation」属性がその設定となる。デベロッパーマニュアルには非常に多くの値があるが、Unity で利用する場合はおおむね「縦置き」(=portrait)か「横置き」(=landscape)であり、デバイスの上下、左右の向きによって回転するか否かの「sensor」を組み合わせると考えて良いだろう。例えば横置きでデバイス方向が決まっている場合「landscape」で、横置きでデバイスの方向により回転させる場合「sensorLandscape」のようになる。VRでは横置き固定、2D横スクロールゲームでは横置きで回転可といった具合だ。縦横どちらでも回転できる場合は「sensor」だけで良い。以下に「横置きでデバイスの向きにより回転」の例を挙げておこう。

<activity(…略…)
android:screenOrientation="sensorLandscape"
(…略…)/>
</activity>

 インポートした「Plugins/Android/」フォルダには「AndroidManifest-FullPlugin_Landscape.xml」「AndroidManifest-FullPlugin_Portrait.xml」「AndroidManifest-FullPlugin_Sensor.xml」が入っているが、これらはそれぞれ「sensorLandscape」「sensorPortrait」「sensor」が設定してある。

 Unity 側の設定の場合、メニューから「Edit>Project Settings>Player」で「PlayerSettiings」に画面回転の設定がある。「Resolution and Presentation」を開くと「Allow Orientations for Auto Rotation」があるので、ここで利用できる縦置き、横置きと回転方向を設定しよう。例えば上のマニフェストファイルの例と合わせて「横置きでデバイスの向きにより回転」の場合、以下のようになる。


 Android 端末の場合、iPhone と違って規定が少ないため、メーカーによってデザインやボタン配置が異なる。なので、ユーザーのためできる限り回転は対応しておいてあげたい(縦または横のどちらかにするのは構わないが)。ヘッドホンのプラグの位置や音量・電源ボタン、利き手が右利き・左利きでも持ちやすさは変わるからね。もちろんVRのようにあらかじめ方向が決まっているものはその限りではない。



 その他の注意点などはインポートした「FantomPlugin」フォルダの「fantomPlugin_ReadMe_jp.txt」("_en"は英語版)に書かれているので、必要があれば確認して欲しい。最近はアセットストアに出したため、海外の方からも質問メールを受けるようになった。ドキュメントにはアドレスも書いておいたので、直接質問してくれても構わない。ツイッターでも何度か質問受けてるね。たまに研究に没頭して何日か放置してることもあるが(笑)、気づいたら大抵返事はしてるので気長に待っていて欲しい。どちらでもご自由に。


●ツイッター連携の質問箱にも登録した

>>モナ箱タイムライン



(関連記事)
【Unity】Androidのトーストやダイアログ、通知、音声認識、ハード音量操作など基本的な機能を使えるプラグインを作ってみた
【Unity】Unity Asset Store にアセットを提出(申請)する

スポンサーサイト

category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityライブラリ  Unityプラグイン 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/293-55f81538
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop