fc2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム »ユニティちゃん
このページの記事一覧

【Unity】Androidで音声認識を使う  


 今回はプラグイン内に入っている音声認識を改めて Unity 側のコードを中心に書いてみよう。大まかにはダイアログを表示する方法と、自分でUIなどを用意し、コールバックメソッドを使って実装していく方法がある。用途によって使い分けるのも良いだろう。

 プラグインの内部的なコード(Java)を知りたい場合は以前の記事を参照して欲しい。プラグイン自体のセットアップからはじめる場合も以前の記事を参照。

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



(※) Unity 5.6.3p1 / AndroidStudio 2.3.3 / Windows10(x64) / Galaxy S7 Edge (Android 7.0) で確認



■音声認識する際の AndroidManifest.xml について

※Android11 以降では音声認識(SpeechRecognizer)に専用パーミッションが必要になったようです。

 プラグインのセットアップにも書いてあるが、ここではもう少し詳細に解説しておこう。Googleの音声認識など別のアプリケーションから結果を受け取る際には Unity で通常使われるアクティビティ「UnityPlayerActivity」をオーバーライドした、「ReceiveResultsOnUnityPlayerActivity」(他のアプリケーションから結果を受信するアクティビティ:プラグイン内に入っている)または「FullPluginOnUnityPlayerActivity」(プラグイン機能のすべてが入っている)を使う必要がある。これらのアクティビティ(Activity)はこのプラグイン独自のアクティビティで、他のアプリケーションから何らかのメッセージを受信できるコードが含まれている(Java コードは以前の記事に掲載してある)。インポートした「Assets/Plugins/Android/」にはマニフェストファイルのテンプレとして「AndroidManifest-Speech~.xml」または「AndroidManifest-FullPlugin~.xml」が含まれているので、これらの中から適切なものを選んで(「縦置き・横置き」とか「API Level」とか)、「AndroidManifest.xml」にリネームしてビルドすることで利用することが可能になる。


 なお、ダイアログを表示せず、音声認識のコールバックイベントを実装して結果を受信するなら、オーバーライドしたアクティビティを使う必要はない。具体的には例えば、後述する「StartSpeechRecognizer()」を使って音声認識の音声待機・開始・結果取得・エラーのコールバックを実装するなら、これらマニフェストファイルは必要ない(Unity がデフォルトのマニフェストファイルを用意してくれる)。Unity ではキャラなどを出したいことも多いと思うので、少し大変だが、コールバックイベントを実装していく方法はオススメだ。

(※) 音声認識にはマニフェストファイルに録音パーミッション "RECORD_AUDIO" が必要(「AndroidManifest-Speech~.xml」または「AndroidManifest-FullPlugin~.xml」には含まれている)。

(※) 独自のマニフェストファイルでビルドすると警告「Unable to find unity activity in manifest. You need to make sure orientation attribute is set to sensorPortrait manually.」が出るが、「UnityPlayerActivity」以外のアクティビティを使うと出るものなので気にしなくて良い(orientation=画面回転はUnity側のアプリの設定に合わせた方が良い)。



■ダイアログを使用した音声認識の利用方法


 サンプルシーン「SpeechRecognizerTest」には2つの方法が含まれているが、こちらは「Speech Dialog」のボタンを押したとき出てくる Googleの音声認識ダイアログを利用する方法だ。簡単に言えば、このダイアログは別のアプリケーションであって、それを呼び出して結果だけを受け取る方法であり、音声認識中の待機や開始、失敗(エラー)のときなどは任せっきりで、結果を受け取るだけなので実装は非常に楽だ。しかし、前述した「別のアプリケーションから結果を受け取る特別なアクティビティ」が必要なのと、ダイアログの性質上、画面にオーバーレイで重ねられて表示されるので、Unity でキャラなどが表示されている場合見えなくなってしまうのがデメリットだ。なので、InputField の文字入力の代わりに使うなど、見た目を気にする必要がないときに利用する方が良いだろう(受信する結果などは後述するコールバックの方法と何ら変わりはない)。

 それでは、音声認識のダイアログを呼び出す所からやってみよう。

●Unity から音声認識ダイアログを呼び出す
using FantomLib;

#if UNITY_ANDROID && !UNITY_EDITOR
AndroidPlugin.ShowSpeechRecognizer(callbackGameObject, resultCallbackMethod, message);
#endif

●引数
callbackGameObject音声認識が成功した際、結果をコールバックするヒエラルキーにある GameObject の名前。
resultCallbackMethod音声認識が成功した際、結果をコールバックするメソッドの名前(callbackGameObject 内)。引数に string 型を1つとる。
messageダイアログに表示されるメッセージ文字列。省略すると(=空文字("")) "なんでも話してみてください" になる(システム/バージョンによるかも)。

 認識された音声は "候補1\n候補2\n候補3" のように改行区切り("\n") でヒエラルキーにある GameObject(callbackGameObject)にあるメソッド(resultCallbackMethod)の引数(string 型)として1つづきの文字列として送られてくる。メソッドの名前は任意だが、シグニチャが違っていると無視されてしまうので気をつけよう。例えば結果のコールバックメソッドの名前を "OnResult" と名付けたとすると、以下のように書けば、認識された1つ1つの候補が列挙できる。

●音声認識された文字列を受信するコード
private void OnResult(string result)
{
string[] words = result.Split('\n');
foreach (var item in words)
{
Debug.Log(item); //各候補の文字列
}
}

 ここでは foreach で認識された各候補を表示しているだけだが、ここであらかじめ作っておいた辞書などと照合して処理を分岐したり、プラグインの選択ダイアログを使ってユーザーに絞り込んで貰って、文字列を InputField に代入して利用するなどでも良いだろう。

 サンプルコード「SpeechRecognizerTest.cs」では「ShowSpeechRecognizer()」「ResultSpeechRecognizer()」になるので、コピペなどして使えば難しくはないだろう。シーン「SpeechRecognizerTest」内で「Web Search」のチェックをオンにしたときには選択ダイアログが出るようにしてあるので、絞り込みをしたいときはこの辺りをまるっとコピペすれば簡単に使えると思う。



■コールバックを実装した音声認識の利用方法


 こちらは前述のダイアログを使用した方法とは異なり、Unity でダイアログを介さずに音声認識の結果やエラーなどを受信する方法となる。サンプルシーン「SpeechRecognizerTest」では「Speech Here」のボタンを押したときがそれだ。少し大変かも知れないが、ダイアログを使うより自由度は高いので、Unity などビジュアルが中心のコンテンツには合っている(ビジネスツールみたいなものは、かえってダイアログを出したほうがわかりやすい気がする)。「一択彼女(加藤恵)」みたいなアプリも内部的には同じものを使ってると思う(このプラグインとは関係ないです)。ちなみに音声認識中の "ピロ♪" という音は消せないそうだ。

 なお、こちらのコールバックを実装する方法では前述した特別なアクティビティは必要ないが、録音パーミッション("RECORD_AUDIO")だけは必要だ。

 それではダイアログなしの音声認識を開始するコードを書いてみよう。また未確認だが、機種によって微妙に挙動が異なるとの話もあるので、実機があるのなら色々テストしておいた方が良いかも知れない。

●Unity からコールバックを実装した音声認識を開始する
using FantomLib;

#if UNITY_ANDROID && !UNITY_EDITOR
AndroidPlugin.StartSpeechRecognizer(callbackGameObject, resultCallbackMethod, errorCallbackMethod,
readyCallbackMethod, beginCallbackMethod);
#endif

●引数
callbackGameObject音声認識の結果やエラーなどをコールバックするヒエラルキーにある GameObject の名前。
resultCallbackMethod音声認識が成功した際、結果をコールバックするメソッドの名前(callbackGameObject 内)。引数に string 型を1つとる(結果が返る)。
errorCallbackMethod音声認識が失敗した際、エラーをコールバックするメソッドの名前(callbackGameObject 内)。引数に string 型を1つとる。主なエラーは以下を参照
readyCallbackMethod音声認識が開始され、声の待機をはじめたときコールバックするメソッドの名前(callbackGameObject 内)。UI などを変化させて音声認識がオンになった状態がユーザーにわかるようにしてあげると良い。引数に string 型を1つとる。値は必ず "onReadyForSpeech" になる。タイミングをとるためだけのコールバック。省略可。
beginCallbackMethod音声認識が開始→待機から、はじめの声がマイクに入ったときコールバックするメソッドの名前(callbackGameObject 内)。UI などを変化させて認識中であることをユーザーにわかるようにしてあげると良い。引数に string 型を1つとる。値は必ず "onBeginningOfSpeech" になる。タイミングをとるためだけのコールバック。省略可。

 コールバックは色々あって大変なのだが、特に重要なものは結果(resultCallbackMethod)とエラー(errorCallbackMethod)のコールバックだ。以下に例を載せておこう。

 例えば結果のコールバックメソッド(resultCallbackMethod)の名前を "OnResult" と名付けたとすると、以下のように書けば、認識された1つ1つの候補が列挙できる。

●音声認識された文字列を受信するコード
private void OnResult(string result)
{
string[] words = result.Split('\n');
foreach (var item in words)
{
Debug.Log(item); //各候補の文字列
}
}

 認識された音声は "候補1\n候補2\n候補3" のように改行区切り("\n") でヒエラルキーにある GameObject(callbackGameObject)にあるメソッド(resultCallbackMethod)の引数(string 型)として1つづきの文字列として送られてくる。メソッドの名前は任意だが、シグニチャが違っていると無視されてしまうので気をつけよう。

 ここでは foreach で認識された各候補を表示しているだけだが、ここであらかじめ作っておいた辞書などと照合して処理を分岐したり、プラグインの選択ダイアログを使ってユーザーに絞り込んで貰うのも良いだろう。

 次にエラー時のコールバックメソッド(errorCallbackMethod)の名前を "OnError" と名付けたとすると、以下のように書けば、エラーでの分岐ができる。

●音声認識で失敗したときのエラーを受信するコード
private void OnError(string errmes)
{
switch (errmes) {
case "ERROR_NO_MATCH":
Debug.Log("認識失敗");
break;
case "ERROR_SPEECH_TIMEOUT":
Debug.Log("タイムアウト");
break;
case "ERROR_NETWORK":
Debug.Log("ネットワークに繋がらない");
break;
case "ERROR_AUDIO":
Debug.Log("録音パーミッションがない");
break;
・・・(略)・・・
}
}

 引数で返ってくる値はエラーコードの文字列となる。エラーコードは公式のデベロッパーサイトも参照して欲しいが主に以下のものが出ると考えて良いだろう。

●音声認識でよく出るエラー
ERROR_NO_MATCH音声認識できなかったときに出るエラー。1音のような短いときや、声量が小さすぎるとき、周りの騒音が邪魔で聴き取れないときなどに出やすい。
ERROR_SPEECH_TIMEOUT音声認識が開始→待機中に時間切れしたときに出るエラー。周りの騒音が邪魔で聴き取れないときなどにも出ることがある。
ERROR_NETWORK認識された語句をネットワーク上のデータベースと照合する際に接続できなかったときのエラー。他のアプリがネットワークを専有してたり、何からの理由でネットワークがブロックされているときにも出る。
ERROR_AUDIOマニフェストファイル(AndroidManifest.xml)に録音パーミッション("RECORD_AUDIO")が無いときに出るエラー。パーミッションタグを挿入して再ビルドするしかない。

 他のエラーは以下を参照。
SpeechRecognizer

 その他には音声認識の起動のコールバック(readyCallbackMethod)、声の取得開始(beginCallbackMethod)があるが、それぞれ必ず "onReadyForSpeech", "onBeginningOfSpeech" の文字列が返る。これらはタイミングをとるためのコールバックなので、ここで UI を変化させたり、アニメーションを開始したりすると良いだろう。

 これらのサンプルコードは「SpeechRecognizerTest.cs」の「StartSpeechRecognizer()」「OnReady」「OnBegin」「OnResult」「OnError」とほぼ同じだ。コピペして中身だけ入れ替えれば簡単に利用できるだろう。

 もう1つ、中断する方法を書いておこう、これはリリース(オブジェクト解放)と同じものになる。未確認だが、この中断の挙動が実機の機種によって微妙に違うという話を見たので、使う際は気をつけた方が良いかも知れない。基本的にこの音声認識は放っておいても認識失敗("ERROR_NO_MATCH")かタイムアウト("ERROR_SPEECH_TIMEOUT")で停止するので、必要ないなら中断機能を付けないのも手だ。ともあれ、とりえあず例を載せておこう。といっても音声認識のオブジェクトをリリースするだけだ。

●音声認識を中断・リリースする
using FantomLib;

#if UNITY_ANDROID && !UNITY_EDITOR
AndroidPlugin.ReleaseSpeechRecognizer();
#endif

 内部的なコード(Java)には「SpeechRecognizer.destroy()」を使っている。他にも「SpeechRecognizer.cancel()」とか「SpeechRecognizer.stopListening()」も試してみたが、なぜか私の環境(Galaxy S7 Edge)では上手く行かなかった。この辺りが「停止は機種によって微妙に挙動が違う」と言われる所以なのかも知れない。なので確実に停止させるためには、オブジェクトをリリースするのが一番と考えてこの方法のみを実装してある。

 中断のサンプルは「SpeechRecognizerTest.cs」の「StopSpeechRecognizer()」になるが、同時に UI を止めているくらいで、それほど見る必要もないかも知れない。



■ユニティちゃんと音声認識でじゃんけん(Android 版)

 せっかくなので、このプラグインを使って音声認識でじゃんけんゲームを作ってみた。音声認識の箇所はパッケージに入っている「Assets/_Test/Scripts/SpeechRecognizerTest.cs」をほぼそのまま使っている。具体的には、受け取った結果は改行("\n")で連結されてくるのでそれを分割し、それらの最初の1文字でグー、チョキ、パーを判定する処理(いくつか候補をデータ化してある)を追加しただけだ。

(※) Unity 2017.1.1f1 / Windows10(x64) でビルド。Galaxy S7 Edge (Android 7.0) で確認。

デモアプリのダウンロード (Google Drive を利用)


Android 4.2以上
※「提供元不明アプリのインストール」許可が必要です。


 じゃんけん自体のアルゴリズム・作成方法を知りたければ以下の書籍を参考にすると良いだろう。アイコンがそっくりなのは、実際にこの本を以前読んでいたためである(笑)(※アプリ内のアイコンは新たに作ったものです)。また音声認識は以下の本も参考にしている(※ただし少し古い。実際のビルドは AndroidStudio 2.3.3 でやった)。なのでこのサンプルは2つをミックスしただけとも言える(笑)。

(じゃんけん画像素材)
LiveMaker 指南番

(じゃんけんゲーム/音声認識 参考)



※この記事のUnityアセットはプラグインとして配布されています。


※とりあえず試してみたい方は、最新版をビルドした apk デモをダウンロードできます。動作確認にもどうぞ。

プラグインデモをダウンロード
(Google Drive を利用)


Android 4.2以上
※「提供元不明アプリのインストール」許可が必要です。


(関連記事)
【Android】【Java】音声入力(音声認識)で文字列を取得する
【Unity】Androidのトーストやダイアログ、通知、音声認識、ハード音量操作など基本的な機能を使えるプラグインを作ってみた
【Unity】Androidのテキスト読み上げ(TextToSpeech)を使う
【Unity】Androidでカスタマイズしたダイアログを動的生成できるプラグインを作ってみた
【Unity】Androidでスライダーで設定を変更するダイアログを使う
【Unity】Androidでスイッチで設定を変更するダイアログを使う
【Unity】Androidの選択ダイアログを使う
【Unity】Androidで日付・時刻選択ダイアログ(DatePicker, TimePicker)を使う
【Unity】Androidで数値・半角英数・パスワード入力ダイアログを使う
【Unity】Androidでテキスト入力ダイアログを使う


このコンテンツの一部には『ユニティちゃんライセンス』で許諾されたアセットが使用されています。
Portions of this work are licensed under Unity-Chan License


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityライブラリ  Unityプラグイン  FantomPlugin  音声認識  ユニティちゃん 
tb: 0   cm: --

【Unity】Amazonアプリストアに申請する  


 今度は Unity で「Google Cardboard/ハコスコ」で楽しめるスマホ用VRアプリをビルドしてAmazon AppStore に申請してみた。というより先日 Oculus Store に申請した GearVR アプリは、元々 Cardboard 用に作ったアプリだったので、こちらも試しにアップしてみるのも良いかと思っただけだったりする(てゆか最近まで個人でも Amazon AppStore から配信できることを知らんかった(笑))。

 やってみた感想は、たぶんこれまでで一番簡単だった。バイナリ(apk)のチェックなどは完全自動化されているようだし、そもそもアプリ動作に対する要件が特にないので(例えば「バックボタンで終了しろ」みたいな)、画像を揃えるだけで申請できた。また Google Play で公開されているものをそのまま使っても良いようなので(ただし、Google の API は使えないので、Amazon の API に入れ替える必要あり)、既にアプリ公開している人でもリーチを広げるのには良いかも知れない。デベロッパー登録から申請まで全て無料でできるので試してみるのも一興かと(笑)。



(※) Unity 5.6.2p3 / Windows10(x64) で確認



■Amazon AppStore 申請の大まかな流れ

 まずは既存の apk があるのなら、デベロッパーサイトにある「テストを始める」にその apk ファイルをドラッグ&ドロップしてみるのも良いかも知れない。申請時にも同じように apk をアップロードできる画面があるが、ここにドロップした場合は、デベロッパー登録なしでもテストできる。問題がなければ、そのまま申請の手続きの画面に移ることも可能だ(結果の履歴から申請登録することもできる)。


 デベロッパー登録がまだならアカウントを作成する必要があるが、それが完了したら即申請もできる。以下に簡単な申請までの流れを書いておこう。


1.デベロッパー登録をする。税に関する情報入力(課金アプリにする場合や広告などを使うときの税徴収に関する電子公文書)は少し面倒だが、無料にする場合も必要らしい。認証は小一時間もすれば完了する。

2.デベロッパーサイトの「ダッシュボード」または「アプリ&サービス」の「新規アプリを追加」でアプリを登録できる。アプリの情報入力および画像アセット、バイナリ(apk)をアップロードする。また、ドラッグ&ドロップのテストをした場合は結果の履歴が残っているので、そこから登録もできる(最新版は一番上)。

3.自動チェック(画像アセットが揃っている、アプリの問題チェック通過)が済んだら、Amazon AppStore に申請する(すべてが完了したら「アプリを申請」が押せるようになる)。

4.申請後はしばらく審査待ちになる(最大1週間とあるが、早ければ1日でリリースできる)。

5.審査をパスしたら、今度はリリース待ちになる(リリース日は情報入力で設定した日。未入力なら審査パス後にすぐ)。


 ちなみに私の場合、リリース日は特に指定しなかったせいもあり、約6時間後にはリリースされていた。はやっ!



■Amazon AppStore 申請要件の概要(主に画像アセット)

 ここでは必要なアセット(主にストア用画像)をまとめておく。細かい内容は FAQ に書かれているので、簡単に目を通しておくと良いだろう。

●提出するアセットの仕様(※画像のサイズなど)

・小アイコン:114 x 114px PNG (背景色透明)(アプリをインストールした後、端末に表示されるアイコン)

・大アイコン(サムネイル):512 x 512px PNG (背景色透明)(アイコンと同一の画像であること)

・スクリーンショット:3~10 枚まで:PNG または JPG。使用できるサイズは、
 800 x 480px (5:3), 1024 x 600px (128:75), 1280 x 720px (16:9), 1280 x 800px (8:5),
 1920 x 1080px (16:9), 1920 x 1200px (8:5), 2560 x 1600px (8:5)
 のいずれか(縦長または横長)

・プロモーション用画像 (推奨):1024 x 500px (256:125) (横長のみ) PNG or JPG

・動画:最大5 MPEG-2, WMV, MOV, FLV, AVI, H.264 MPEG-4
 最小幅720px (4:3 or 16:9); 高さ1200 kbps以上

(実際例)

(c) UTJ/UCL

(参考)
アプリの申請:アプリの詳細



■アプリの Build Settings

 Amazon AppStore にはあまり技術的な要件はないみたいだが、一応今回のビルド設定も載せておこう。ここでは Cardboard アプリを例にしているが、基本的に普通のアプリでも変わらないので、特に気をつける部分は API Level や CPU の設定くらいかも知れない。実際には申請時の登録情報にサポートしている端末を選択することができるので、既存のままでもかまわない。Fire タブレットなどにも対応させるなら「Android 5.1 Lollipop API Level 22」あたりにしておけば良いらしい(持ってないので未実証だが、アプリテストを信頼するとして(笑))。


 あとはテクスチャの圧縮を使うなら「OpenGL ES」のバージョンくらいか。「OpenGL ES 2.0」なら間違いないが、「OpenGL ES 3.0」なら「Android 4.3 (API level 18)」以上を、「OpenGL ES 3.1」なら「Android 5.0 (API level 21)」にしておく必要がある。以下にいくつか参考URLを載せておこう。

(参考)
Android プラットフォームのバージョン
OpenGL ES
Unityで画像fを圧縮する際のフォーマットのお話し(ASTCとETC)




 「Quarity Settings」なども任意で良いが、私は GearVR の設定のときと同じものを使っている。パフォーマンスが許すなら「Anti Aliasing」(アンチエイリアス処理)を「2x MultiSampling」以上にしても良いだろう。モバイルの場合、警告「Warning! Using antialiasing on a mobile device may decrease performance severely. You can change the mobile quality settings in 'Project Settings -> Quality Settings'.」(モバイルではアンチエイリアス使うとパフォーマンス下がるよ)が出るが、Android 5.0 (API 21) 以上ならわりといけるようだ。




■アプリのアップデート

 一番簡単な方法は申請の流れのときと同じように「テストをはじめる」に新しいバージョンのアプリをドロップし、「Test Results available」が出たら「View Results」(or 結果を表示)をクリックし、テストの履歴から「AppStore に提出」を押すことだろうか。提出ボタンを押すと「アプリには既にバイナリが含まれています。バイナリを置き換えますか?」とダイアログが出るが「YES」を押し、登録を保存すれば良い。あとは既存の情報を編集したり、リリースノートを書けば申請できるようになる。





 これははじめ戸惑ったのだが、メニューの「次バージョン」を押しても同じ画面になるが、「保存してバイナリを追加」は「既存をそのまま+新しいのを追加」のようになってしまうようだ。また、なぜかバイナリ(binary2)の自動チェックがされず、サポート端末が未設定になる。「バイナリを削除→追加」でも良いかもしれないが、先に述べたテスト結果からそのまま置き換え→提出した方が楽だ。


(関連記事)
【Unity】GearVR アプリを Oculus Store に申請する(要件・仕様の概要)
【Unity】GearVR 用にビルドする


■VR関連参考書籍・動作確認機器


このコンテンツの一部には『ユニティちゃんライセンス』で許諾されたアセットが使用されています。
Portions of this work are licensed under Unity-Chan License

関連記事

category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: ストア申請  Cardboard  VR  ユニティちゃん 
tb: 0   cm: --

【Unity】GearVR アプリをビルドする  


 試しに以前作った Google Cardboard 用アプリを GearVR にしてみたのでその記録。GearVR の作り方は公式の Oculus デベロッパーサイトに多くのドキュメントが掲載されているのだが、なにせほとんどが英語なもので、google翻訳使いながらやるのはとても面倒だった(笑)。日本語のサイトも色々あったけどね。ただ更新が早いので、申請要項などもそうだが、内容が少し古くなっていたので、現時点での方法を簡単にまとめておくことにした。SDKが更新されたらやり方も変わるので注意しよう。

※Oculus Store で配信中(検索:unitychan flyer)

 今回は開発環境は整っていて、かつ Android ビルドができる状態であることを前提とした GearVR 用のビルドの方法なので、環境構築からやる場合は以下の参考URLなどを見て欲しい。内容的にはこれらと被る部分も多いが、ここでは主に公式の Oculus デベロッパーサイトからの重要な部分だけの抜粋を中心に書いていこうと思う。

(参考)
Unity5でGear VR用アプリの開発方法
UnityでGearVRアプリを作成する際の初期設定
UnityでGear VR用アプリを作る(1) 環境準備とAndroidアプリの書き出し
Oculus Unity Documentation Archive (※pdf をダウンロード)

 また、今回は Oculus Utilities 1.16.0-beta を使用することにおいて、Unity2017.1f03 でやってみたら色々エラーが出るようなので、Unity 5.6.2p3 を使っている。なので自力で修正、または今後のバージョンアップで修正されたのなら、細かい仕様が変わってしまっている恐れがあるので、なるべく最新情報を検索してみた方が良いだろう。


(※) Unity 5.6.2p3 / Windows10(x64) で確認



■Oculus Utilities をインポートする(※掲載時点:Oculus Utilities 1.16.0-beta)

 まずは Oculus Utilities をダウンロードして、プロジェクトにインポートしよう。幸いなことに、以前は GearVR の機能を自分で実装する必要があったようだが、現在ではこのパッケージとSDK(後述する PlayerSettings)を導入すればほとんどの機能を自分で実装する必要がない。もし作成したアプリを Oculus Store に申請するなら、ほぼ要件を満たしているので、これを使わない手はない(笑)。

1.Unityパッケージ>Core Packages>Oculus Utilities for Unity 5 (※バージョンは掲載時点) をダウンロード。

※「I have read and agree to the terms of the EULA, 利用規約 and プライバシーポリシー」(規約に同意)をチェックすればダウンロードできるようになる。
※必要ならデベロッパー登録(アカウント作成)をしておいた方が良い。

2.インポートしてすぐにアップデートが促されたら「Yes」ボタンでアップデートする。その場合は、エディタの再起動も必要となる。





 再起動したら、シーン「Assets>OVR>Scenes>GearVrControllerTest」を読み込んでみると良いだろう。ヒエラルキーにある「OVRCameraRig」が GearVR でのカメラやコントローラを扱う中心となるプレファブと考えて良い。「Assets>OVR>Prefabs>OVRCameraRig」にもプレファブはあるが、GearVR コントローラはセットアップされてないので、ヒエラルキーにあるオブジェクトを「OVRCameraRig Gear」とでもしてプレファブ化しておいた方が楽だろう。詳しい内容などは参考URLを見て欲しい。

(参考)
Oculus Utilities for Unity

 このシーンをビルドすれば GearVR コントローラの簡単なテストができる。しかしその前に実機でテストするためには Oculus 用の署名ファイルが必要だ。以下の方法で OSIGファイルを作成しよう。



■OSIG(署名)ファイルを作成する

 実機でテストするには Oculus 用の署名ファイルが必要となる。それは端末ごとのIDとなるので、複数使う場合はそれら全ての署名ファイルを作る必要がある。しかし一度作ってしまえば、端末を替えない限りは別の開発アプリでも使えるので、作ったファイルは大切に保管しておこう。なお、アプリを Oculus Store に申請する場合は、提出用ビルドはOSIGファイルを取り除くこと推奨とあるが、どのみちリリース時に自動で削除されるようなので、そのままでも構わない(審査には引っかからない)。

(参考)
Sign your App with an Oculus Signature File(Preparing for Mobile Development)

1.スマホ端末で Google Play から「SideloadVR(Alpha)」を端末にインストールする。

2.SideloadVR でメニュー(三本線)を開き、「View Device ID」を見る。

(参考)
Device IDの取得とOculus Signature File(osig)の作成(Unity5でGear VR用アプリの開発方法)

3.この Device ID を「Oculus Signature File (osig) Generator」に入力して「Download File」ボタンを押せば、「oculussig_XXX」(XXX には Device ID が入る)ファイルがダウンロードされる。


※まだアカウントが無いときは、デベロッパー登録をする。

4.Unity エディタに戻り、プロジェクトエクスプローラで「Assets/Plugins/Android/assets/」フォルダを作成する(初期状態では「Assets/Plugins/」までしかない)。

5.作った「Assets/Plugins/Android/assets/」フォルダにダウンロードした「oculussig_XXX」(XXX には DeviceIDが入る)をインポートする(ドラッグ&ドロップで良い)。


 なお、adb コマンドでやる場合は以下を参考にして欲しい。

デバイスIDの登録(UnityでGear VR用アプリを作る(1) 環境準備とAndroidアプリの書き出し)
adbコマンドについて(UnityでAndroidアプリをビルドするには)
Oculus Signature File (osig) Generator(Instructions)



■GearVR 用の BuildSettings

 先ほどのシーン「GearVrControllerTest」を保存したら、メニューから「File>Build Settings...」を開こう。ダイアログが出たら「Add Open Scenes」でシーンを追加して、「Platform」を「Android」に、「Texture Compression」を「ASTC」にする。このあたりの設定は以下の参考に載っている。設定したら「Switch Platform」を押して Android 用ビルドに切り替えよう。



(参考)
Build Settings(Building Mobile Applications)

※「DirectoryNotFoundException: Directory 'Assets/Plugins/Android/assets' not found.」と出た場合は、フォルダ「Assets/Plugins/」(※初期状態)以下に「Android/assets」フォルダを作る必要がある。ここに OSIG(署名)ファイルを置く。



■GearVR 用の PlayerSettings

 「Build Settings」ダイアログが開いている場合は「Player Settings...」ボタンを、閉じてしまった場合はメニューから「Edit>Project Settings>Player」で「Player Settings」を開こう。設定項目は色々あるが、ここでは必要な設定だけを書いておく。またあくまで推奨設定なので実際にはパフォーマンスが許すなら任意でも良いようだ。


●Other Settings
[Rendering]
・Multithreaded Rendering : オン
・Virtual Reality Supported : オン
・Virtual Reality SDKs に「Oculus」を追加する(複数で切り替える場合は一番上が優先になるが、使用しないなら削除(「-」を押す)しておいた方がビルドサイズが小さくなる)。

[Identification]
・Package Name : 任意のパッケージ名(※必須)
・Minimum API Level : 「Android 5.0 'Lollipop'(API Level 21)」にする。

[Configuration]
・Device Filter : 「ARMv7」にする(x86は使わないのでARMv7のみにするとビルドが速くなるそうだ)。

(参考)
Player Settings(Building Mobile Applications)

●Publishing Settings
※Oculus Store に申請する場合は、Android の Keystore も必要。

(参考)
Sign your application with an Android Keystore(Building Mobile Apps for Submission to the Oculus Store)
アプリの署名



■GearVR 用の QulitySettings

 メニューから「Edit>Project Settings>Quality」で「QulitySettings」を開こう。Android の場合はデフォルトは「Simple」になっているのでクリックする(Default の▼で変更できる)。以下の設定もあくまで推奨設定なのでパフォーマンスが許すなら任意で良い。


[Rendering]
・Pixel Light Count : 1
・Texture Quality : Full Res
・Anisotropic Textures : Per Texture
・Anti Aliasing : 2x Multi Sampling (or 4x)
・Soft Particles : オフ
・Realtime Reflections Probes : オン
・Bilboards Face Camera : オン

(参考)
Quality Settings(Building Mobile Applications)

※Anti Aliasing を 2x または 4x~ にすると警告「Warning! Using antialiasing on a mobile device may decrease performance severely. You can change the mobile quality settings in 'Project Settings -> Quality Settings'.」(モバイルではアンチエイリアス使うとパフォーマンス下がるよ)が出るが無視して良い。



■実機で試す

 すべての設定が終わったら、再び「File>Build Settings...」を開き、今度は「Build」ボタンで実際にビルドしてみよう。できた apk ファイルを実機に転送してインストールすれば、端末のランチャーから起動できる(装着が促される画面「このアプリケーションを起動するには、端末をGearVRに挿入します」が出る)。ちなみに、転送する方法は USBデザリングや Google Drive などに置いてダウンロードする方法などがある。以下に参考URLを載せておこう。実際に起動してコントローラをいじってみると、画面に出ているパラメタが色々変化するハズだ(起動直後にコントローラを認識してなければ、Backキーを短押しすると認識できる)。OculusStoreに提出するときはマニフェストファイル(AndroidManifest.xml)や署名なども必要になるので、その場合はこちらも参考にして欲しい。

(参考)
Galaxy S6のデバッグモードをオンにする(Unity5でGear VR用アプリの開発方法)
提出用 apk をビルドする

●ユニバーサルメニューのVideoShotで録画したもの。長押しや音量ボタンも機能する。
(※実機では操作中にUIアイコンが見えているのだが録画はされないようだ)
(※) Galaxy S7 Edge で確認

※実際に配信されるとこんな感じになる(カテゴリごと)

※検索で「unitychan flyer」を入れてみると…






(関連記事)
【Unity】GearVR アプリを Oculus Store に申請する(要件・仕様の概要)
【Unity】VRレーザーポインター(ビーム)を作る


このコンテンツの一部には『ユニティちゃんライセンス』で許諾されたアセットが使用されています。
Portions of this work are licensed under Unity-Chan License


関連記事

category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: GearVR  VR  ユニティちゃん 
tb: 0   cm: --

【Unity】Japanese Otaku City(秋葉原モデル)のピンクテクスチャの修正方法  


 クエリちゃんのデモで使われているアキバモデル(Japanese Otaku City:秋葉原の都市モデル)って、Unity Free版を使っているとピンクテクスチャが出るらしいね(Pro版は出ない(?))。私も以前試してみた時、ピンクテクスチャがあるから使うのやめてしまったが(私は Free版使ってます)、修正方法を調べてみようと思ったら、Asset Store のレビューに英文で解決方法が書いてあったので、翻訳して試してみたら上手くいった。その方法。



1.既にアキバモデルがインポート済の状態から、プロジェクトエクスプローラで「ZRNAssets>005339_08932_25_14>Shaders」フォルダを開き、「su_Double_and_Clip」をクリックして、インスペクターを表示する。
(※)「005339_08932_25_14」はリリース時期(バージョン)によって違うかも。



2.インスペクターが表示されたら、右上にある「Open...」ボタンを押し、MonoDevelop などテキストエディタで開く。



3.テキストエディタを開いたら、「void vert」を検索([Ctrl - F])し、そのメソッドの一番はじめの行に「UNITY_INITIALIZE_OUTPUT(Input,o);」というコードを書いて保存する。



4.Unity のエディタに戻ったらすぐに反映されると思うので、他のシェーダ「su_VertexCol_1UV_Single」も同じように、MonoDevelop で開いて「UNITY_INITIALIZE_OUTPUT(Input,o);」のコードを追加して保存する。



5.クエリちゃんのシェーダは「PQAssets>Query-Chan\Shaders」フォルダに「PQ_Skin」「PQ_TransBlue」の2つがあるので、同じようにコードを追加して保存する。





 以上で完了。これでエラー表示も消える。

 私は素材も今のところ Free版しか使ってないが、他の素材でも、たまにピンクテクスチャ(テクスチャ抜けとか)とか出ることあるので、同じエラーだったらこの方法で直るかもね。今まではピンク出たら、面倒なのでその素材は捨ててたが、これからは色々試してみよう…。

(※) Unity 4.6.1f2 で確認。


 他にも修正方法はあったので、以下を参照。

(参考) アキバ風Unityマップ素材
(参考) ゼンリンのJapanese Otaku CityをUnityのアセットストアからインポートしたら...



 そう言えばこのパッケージにオリジナルのクエリちゃん飛行コントローラが入ってるね(「ZRNAssets>005339_08932_25_14>Scripts>FlyThroughController.cs」)。以前作った「クエリちゃんを飛行させる!」と違ってやはりスクリプトでアニメーション制御してた(このスクリプトは参考にしてない)。まぁ、私の作ったものはスクリプトとアニメーターでロジック分離してあるので、他のキャラに応用する等に使うといいかも。「ユニティちゃんを飛行させる!」はまさにその例だしね。







(関連記事)
【Unity】【C#】ユニティちゃんを飛行させる!
【Unity】【C#】クエリちゃんを飛行させる!
【Unity】クエリちゃんを動かす!
【Unity】SDクエリちゃんを動かす!
【Unity】【C#】SDクエリちゃんを飛行させる!
【Unity】【C#】SmoothFollow に回転アングルと距離の遠近機能を付けてみる



このコンテンツの一部には『ユニティちゃんライセンス』で許諾されたアセットが使用されています。
Portions of this work are licensed under Unity-Chan License


"Query-Chan model" は Creative Commons Attribution 4.0 International License(CC-BY) に基づいて配布されています。
"Query-Chan model" by Pocket Queries, Inc. is licensed under a Creative Commons Attribution 4.0 International License(CC-BY).



関連記事

category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: ユニティちゃん  クエリちゃん  Unityトラブルシューティング  サンプル 
tb: 0   cm: --

【Unity】【C#】ユニティちゃんを飛行させる!  


 前回「クエリちゃんを飛行させる!」で作ったスクリプトとアニメーターを利用して、今度はユニティちゃんを空へ飛ばしてみたいと思う。これこそメカニムの醍醐味と言えよう。せっかくの機能なんだから、使わないともったいない(笑)。今回はある意味ユニティちゃんクエリちゃんの勝手にコラボという感じだが、まぁ製品化しているわけじゃないし、ライセンス的にはどちらも問題ないと思う。


 先に概要を挙げておくと、前回作ったスクリプトとアニメーターをユニティちゃん用に改造し、そこそこ見た目おかしくない程度に設定するくらいだ。細かい調整は自分なりにやって欲しい。例えば、高速移動すると服が少しめくれて元に戻らなくなったりすることもあるけど、その辺は大目に見て欲しい(笑)。


 今回も使用したスクリプトやアニメーターをあらかじめ用意しておくので、クエリちゃんを飛ばしたことある人は、「■ユニティちゃんモデルを飛行させる!」から読んでも大丈夫だろう。

>>サンプルのスクリプトとアニメーターをダウンロード
(Google Drive を利用。画面右上にあるダウンロードアイコンを押す)

(※) Unity 4.6.1f2 / Windows8.1(x64) で確認




■モデルを用意する

 今回はユニティちゃんクエリちゃんの両方のパッケージを使うことになる。もし「クエリちゃんを飛行させる!」で作ったシーンがあるのなら、それを [Ctrl - D](Duplicate) で複製して使うのも良いだろう。モデルは各オフィシャルサイトや AssetStore からダウンロードできる。今回使ったパッケージはクエリちゃんモデル「Query-Chan model.unitypackage」(Ver.2.1.0)とユニティちゃん 3Dモデルデータ「UnityChan_1_2.unitypackage」(Ver.1.2)の2つだ。ユニティちゃんのモデルは AssetStore の方ではバージョンが少し古いのか、欲しいものが入ってなかったので、オフィシャルサイトの方からダウンロードしよう。クエリちゃんの場合はオフィシャルサイトからリンクを辿っていくと、AssetStore でダウンロードすることになる。

・クエリちゃんのモデルのダウンロードの説明は→こちら。
(※)以前インポートしたことある人は「C:\Users\(ユーザー名)\AppData\Roaming\Unity\Asset Store\Pocket Queries Inc\3D ModelsCharactersToons」に「Query-Chan model.unitypackage」があるので(Windowsの場合。隠しフォルダになってるかも)、それをプロジェクトエクスプローラにドラッグ&ドロップしても良い。

・ユニティちゃんのモデルはオフィシャルサイトの上部メニューの「DATA DOWNLOAD」からライセンス承諾後、パッケージをダウンロードできる。「ユニティちゃん 3Dモデルデータ」をダウンロード(掲載時点Ver1.2)。



 これらを1つのプロジェクト内にインポートしよう。「~.unitypackage」をプロジェクトエクスプローラにドラッグ&ドロップでもインポートできる。





■飛行移動スクリプトを作る

 前回作ったクエリちゃん飛行スクリプトをユニティちゃんでも使えるように改造しよう。といっても実はクエリちゃん用という部分は「QueryMechanimController」を使っている所だけだ。その関連を削除することになる。
(※)サンプルのスクリプトとアニメーターをダウンロードして使う人は「■ユニティちゃんを飛行させる」まで読み飛ばしても良い。

1.プロジェクトエクスプローラで「QueryFlyingController」を [Ctrl - D](Duplicate) で複製し、「CharacterFlyingController」にリネームしよう。MonoDevelop で開いたら、クラス名もファイル名に合わせることに注意。こちらも「QueryFlyingController」→「CharacterFlyingController」に変更する。

2.テキストエディタの検索機能を使って(Ctrl - F) 「QueryMechanimController」を検索し、その関連はすべて削除する。この部分はクエリちゃんのステートが変わったときに、そのモーション用の表情や手をスクリプトで変更するためのものだ。また「StateTable」「defaultState」「currentState」「oldState」「useEmotionAndHandChange」など「ステート管理用」にまとめられている変数もすべて必要ないので、その辺りもすべて削除しよう。これで完成だ。

 実はこれらを削除してしまうと、ごく汎用的なスクリプトとなる。本家がこの状態で、「QueryFlyingController」の方がクエリちゃんのシステムを分析した上で、クエリちゃん用にカスタマイズしたものと言って良い。だから物によってはユニティちゃん以外でも使える。

●キャラクター飛行コントローラ「CharacterFlyingController」
using UnityEngine;
using System.Collections;

/**
* キャラクター飛行コントローラ
* 2015/3/15 Fantom
*/
[RequireComponent(typeof(CharacterController))]
public class CharacterFlyingController : MonoBehaviour {

/** 前進速度 */
private float forwardSpeed = 0f;

/** キーによる前進速度加速量 */
public float accelerarion = 0.05f;

/** 最小前進速度(下限速度 > 0) */
public float speedMin = 0f;

/** 最大前進速度(上限速度) */
public float speedMax = 10f;

/** 上下[左右]速度(Y軸[X軸:rotationMode=false]方向移動速度) */
public float moveSpeed = 3f;

/** 左右旋回モード(false = 左右移動) */
public bool rotationMode = true;

/** 左右旋回速度 */
public float rotationSpeed = 90f;

//------------------------------------------------//
//キー使用 ON/OFF

/** (前進)加速キーの使用 ON/OFF */
public bool useAccelKey = true;

/** (前進)減速キーの使用 ON/OFF */
public bool useBrakeKey = true;

//------------------------------------------------//
//キー設定

/** (前進)加速キー */
public KeyCode accelKey = KeyCode.LeftShift;

/** (前進)減速キー */
public KeyCode brakeKey = KeyCode.LeftControl;

/** 上昇キー */
[SerializeField]
private KeyCode upKey = KeyCode.UpArrow;

/** 下降キー */
[SerializeField]
private KeyCode downKey = KeyCode.DownArrow;

/** 左移動キー */
[SerializeField]
private KeyCode leftKey = KeyCode.LeftArrow;

/** 右移動キー */
[SerializeField]
private KeyCode rightKey = KeyCode.RightArrow;

//------------------------------------------------//
//仮想軸キー管理用

/** 左右仮想軸キー */
private AxisKey horizontalKey;

/** 上下仮想軸キー */
private AxisKey verticalKey;

//------------------------------------------------//
//実行用

/** 移動方向のローカル空間→ワールド空間変換用 */
private Vector3 moveDirection = Vector3.zero;

/** CharacterController キャッシュ */
private CharacterController controller;

/** Animator キャッシュ */
private Animator animator;

//------------------------------------------------//

// Use this for initialization
void Start () {
//オブジェクトキャッシュ
controller = this.GetComponent<CharacterController>();
animator = this.GetComponent<Animator>();

//キーを設定
horizontalKey = new AxisKey(rightKey, leftKey);
verticalKey = new AxisKey(upKey, downKey);

//初期化
forwardSpeed = Mathf.Clamp(forwardSpeed, speedMin, speedMax);
}

// Update is called once per frame
void Update () {
//入力による移動処理

bool accel = useAccelKey && Input.GetKey(accelKey);
bool brake = useBrakeKey && Input.GetKey(brakeKey);

forwardSpeed += (accel ? accelerarion : 0f) + (brake ? -accelerarion : 0f);
forwardSpeed = Mathf.Clamp(forwardSpeed, speedMin, speedMax);

float h = horizontalKey.GetAxis();
float v = verticalKey.GetAxis();

if (rotationMode) {
transform.Rotate(0f, h * rotationSpeed * Time.deltaTime, 0f);
moveDirection.Set(0f, v * moveSpeed, forwardSpeed);
} else {
moveDirection.Set(h * moveSpeed, v * moveSpeed, forwardSpeed);
}

moveDirection = transform.TransformDirection(moveDirection);
controller.Move(moveDirection * Time.deltaTime);

//------------------------------------------------//
//Animator

animator.SetFloat("Speed", forwardSpeed);
animator.SetFloat("Horizontal", h);
animator.SetFloat("Vertical", v);
}
}

 尚、キー操作には前回作った「AxisKey」クラスが必要である。

 内容的には前回作ったスクリプトと変わらない。
上下左右のキー設定を「SerializeField」の「private」スコープにしているが、これはこのスクリプト内では「AxisKey」クラスを使っているためで、ユーザーにカスタム設定させたい場合は「horizontalKey」「verticalKey」を「Start()」の中にあるように「AxisKey」のインスタンスを再設定するメソッドなどを付け加えれば良い。

 「rotationMode」はデフォルトで左右のキーを旋回にしてあるが、false にすれば単純な移動になる。シューティングには false の方がしっくり来るかもしれない。また「speedMin」「speedMax」で前進速度を制限してあるが、同じ値にすれば一定速度のみとなる。「speedMin」を初期値で0以上にしておけば、プレイ開始と同時に前進することになる。

>>サンプルのスクリプトとアニメーターをダウンロード
(Google Drive を利用。画面右上にあるダウンロードアイコンを押す)




■ユニティちゃん用 飛行アニメーターを作る

 次にスクリプトから利用するアニメーターを作ろう。アニメーターとは複数のアニメーションクリップを遷移させるものと考えて良い。ユニティちゃんは「Face」(表情)レイヤーを持っているので、その部分だけを追加しよう。

1.前回作ったアニメーター「PQchan_Flying.controller」を [Ctrl - D](Duplicate) で複製する。名前は「PQchan_Flying_for_UnityChan.controller」としておいた。これをダブルクリックして「Animator」タブを開こう。


2.「Base Layer」はそのままで、まずは「Face」(表情)レイヤーを作成する。画面左上の「Base Layer」の右下にある「+」ボタンを押せば、新規レイヤーが作られる。名前を「Face」に変更したら、「Mask」を「face only mask」に設定する。この「Avatar Mask(アバターマスク)」とはキャラ全体から一部を抜き出す(不要な部分を隠す)ものと考えて良い。つまりユニティちゃんは表情のアニメーションとそれ以外のアニメーションが別々に再生されているという感じになる(目パチとか)。この機能を使えば2つ以上のモーションの合成みたいなものもできる(例えば上半身と下半身で別々のアニメーションクリップを再生するとか)。



3.この「Face」レイヤーに登録するステートだが、遷移は特に必要ないので(スクリプトがやってる)、プロジェクトエクスプローラで「UnityChan>FaceAnimation」フォルダを開き、ここにあるアニメーションクリップをすべて選択し、Animator にドラッグ&ドロップしよう。追加し終わったら、その中から「default@unitychan」を探し出し、そのステートを右クリックして「Set As Default」でデフォルトステート(オレンジ色)に設定する。並び方などは適当で良い。これで完成だ。
(※)画面からはみ出て見にくいときは、[Alt + ドラッグ](Windows)で画面を移動できる。



●デフォルトステートを設定する


>>サンプルのスクリプトとアニメーターをダウンロード
(Google Drive を利用。画面右上にあるダウンロードアイコンを押す)




■ユニティちゃんモデルを飛行させる!

 さてここからが本番。必要なものは揃ったので、あとはモデルに組み込むだけだ。空に飛ばすのでシーンは何でも構わないが、床くらいはあった方がわかりやすいので、以前ユニティちゃんを歩行させた時のように「Plane」にテクスチャでも貼って、適当に背景でも作ろう。今回はその辺りは割愛して、ユニティちゃんを配置する所からはじめる。以前作ったシーンがあれば、[Ctrl - D](Duplicate)で複製して、それを使っても良い。

1.プロジェクトエクスプローラで「UnityChan>Prefabs」フォルダを開き、「unitychan_dynamic」をヒエラルキーにドラッグ&ドロップしよう。このプレハブを選んだ理由は通常の「unitychan」プレハブの場合、飛行したときあの長いツインテールがなびかず、自分の体に刺さってしまうからだ(笑)。「unitychan_dynamic」の場合は初めから組み込まれている「Spring Manager(Script)」コンポーネントを調整すれば、飛行中も髪がなびき、いい感じになる。
(※)ユニティちゃんの色が暗く見えるようなら、同フォルダにある「Directional light for UnityChan」もヒエラルキーにドラッグ&ドロップして使うと良い。



2.モデルをヒエラルキーに追加したら、インスペクターで少しばかり Y 軸の配置を調整し、「Character Controller」を追加しよう。また「Center」は0のままで、「Height」だけ調整しておこう。編集画面上ではモデルとコライダがずれているように見えるが、飛行モーションはどうやら基準座標は真ん中になっているようなので(歩行モーションは足元)、実行したとき、少しばかり空中に浮いていないと、床にめり込んでしまうからだ。






3.そのままインスペクターで「Idle Changer(Script)」と「Random Wind(Script)」を無効にしてしまおう(Remove Component しても良い)。「Random Wind(Script)」は別に使っても大丈夫なのだが、無い方がスッキリする。「Face Update(Script)」もGUIが邪魔なら、MonoDevelop で開いて「OnGUI」メソッドをコメントアウトした方が良い。



4.次いで先に作った「CharacterFlyingController」(飛行用スクリプト)を追加しよう。設定はデフォルトのままで良い。



5.次にアニメーターを設定しよう。インスペクターで「Animator>Controller」を「UnityChanARPose」(ARポーズ)から「PQchan_Flying_for_UnityChan」(飛行用)に変更する。「PQchan_Flying_for_UnityChan」は先に作ったアニメーターのことだ。そして「Apply Root Motion」をオフにしておく。これがオンになってるとうまく飛べない。



6.最後にカメラを追従させよう。超簡単な方法は「Main Camera」を「unitychan_dynamic」の子要素にしてしまう方法だ。ヒエラルキーで「Main Camera」を「unitychan_dynamic」にドラッグ&ドロップして、カメラの位置を調整するだけで良い。こうするとユニティちゃんと一緒にカメラも動く。ここでは微妙に上から見下ろす角度にしておいた。これでめでたく完成だ。シーンは適当な名前で保存しよう。






 デフォルトでは[↑][↓]で上昇下降、[←][→]で左右旋回、[Shift](左)で前進加速、[Ctrl](左)で前進減速となっている。「Character Flying Controller(Script)」のインスペクターで「Rotation Mode」のチェックを外せば、左右キーはシューティングの様な移動になる。髪のなびき方が大き過ぎると感じたら、「Spring Manager(Script)」のインスペクターで「Dynamic Ratio」を少し低くするのも良いだろう。シーンを再生して確かめてみよう。










(関連記事)
【Unity】【C#】ユニティちゃんをサクっと簡単に動かす!
【Unity】【C#】クエリちゃんを飛行させる!
【Unity】【C#】SDクエリちゃんを飛行させる!
【Unity】プロ生ちゃんを飛行させる!
【Unity】【C#】SmoothFollow に回転アングルと距離の遠近機能を付けてみる
【Unity】【C#】FPS(フレームレート)をリアルタイムに測定して表示するv2(4隅選択可能で、画面サイズの変更にも対応版)




このコンテンツの一部には『ユニティちゃんライセンス』で許諾されたアセットが使用されています。
Portions of this work are licensed under Unity-Chan License


"Query-Chan model" は Creative Commons Attribution 4.0 International License(CC-BY) に基づいて配布されています。
"Query-Chan model" by Pocket Queries, Inc. is licensed under a Creative Commons Attribution 4.0 International License(CC-BY).



関連記事

category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityライブラリ  C#  ユニティちゃん  サンプル 
tb: 0   cm: --


プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR

▲ Pagetop