CrossRoadスマートフォン用の表示で見るCrossRoadAR、MR、VR、Babylon.jsを中心とした技術ブログ。Mappingでチュートリアル通りに動かなかった箇所が解決したので、動作確認の動画を追加しました。Academy」というDeveloper用のページがあります。ここには、ゼロからHoloLens開発を始める人向けに、相当細かく手順が書かれています。HoloLensのアプリ開発を進めやすくするため、Microsoftからは必要なソースコード、Prefab、シェーダなどをまとめた、HoloToolkitも公開されています。Academyでは機能別に解説しており、Unity標準のAPIがすぐにわかるように記述されているので、HoloToolKitを読む前にソースコード理解を兼ねてAcademyを試してみるのも良いと思いました。101」を解説してみました。Emulator」は、以前書いた内容とかぶるので省略します。Academyに記載されている手順はかなり丁寧なので、手順そのままで理解に困らなかった場所については、今回のHologram101以降についても説明を簡略化する予定です。Docs」の内容を解説します。Docs」を開き、プロジェクトをダウンロードします。5.5と書いてある通り、開発環境はUnity5.5にします。5.5からは、HoloLens向けビルドが正式サポートされているので、なるべく5.5に合わせることをお勧めします。指示にしたがってプロジェクトをUnity5.5で開けばOKです。全てのAcademyコンテンツを開くと、完成版のUnityプロジェクトと、チュートリアル用に抜けている(例:スクリプトが入ってない)Unityプロジェクトの二つがあります。チュートリアル通りにやってもうまくいかない場合は、完成版を使うことでも動作確認ができるようになっています。worldこれは以前HoloLensのエミュレータ環境構築とほぼ同じ、いわゆるHelloWorld的な流れが書いてあります。大雑把に言うと、以下の手順でアプリをHoloLensにデプロイできます。Gazeこれは、Unityの機能だけでGaze(見つめる)の機能を実装しています。CameraからRaycastを飛ばし、29行目でオブジェクトにヒットしたときにCursorオブジェクトを表示させています。32行目でCursorオブジェクトの表示位置を指定しています。実行すると、GemaObjectに視線を合わせたときだけドーナツ状のカーソルが表示されます。これはわかりやすいですね。Gesturesこれは、AirTap操作をしたとき、カーソルで選択したGameObjectにイベントを発行することができます。チュートリアルでは、AirTapでSphereを選択すると、Sphereが落下します。gist37fb4586fec8562e16b8b9bfa58496e4ここでの肝はGestureRecognizerクラスです。UnityEngine.VR.WSA.Inputの中にあり、Unity5.5で追加されました。Holographic用のAPIと思われます。21行目のtappedCountでタップ操作を検出し、26行目のSendMessageUpwardsで、対象のGameobjectに付いているOnSelectメソッドを呼び出す準備をしています。あとは、Update関数の中でRaycastを使ってGameObjectを検出し、先ほどのTappedEventでSendMessageUpwardsを発行します。呼ばれてからTappedEventを発行できるようです。一度イベントを発行すると、StopCapturingGesturesを呼んでいます。都度初期化して使うようですね。最後に、26行目で発行したOnSelectメソッドですが、これはOnSelectメソッドを持つGameObjectに作用します。このサンプルではSphereCommands.csに書かれています。gist962fcae8d97d8d24d60f3eb744bd73f0OnSelectメソッドが呼ばれると、AddComponentでSphereにrigidbodyを付加します。そのため、Sphereが落下します。サンプルシーンでは、collisionDetectionModeを指定することで、SphereにCollisionを指定しています。そのため、Unityで作ったplaneにぶつかるとはね返ります。Voiceこれを使うと、音声認識をさせることができます。この音声認識エンジンは、Windows10のUWPで使えるものと同じです。この辺は少しだけですが、以前のブログで紹介したことがあります。sphere"と発声すると、sphereが落下します。ここでは、SpeechManager.csで処理を実行しています。gist7643a95e1fede12182601bac42ebb859ここでの肝は、9行目のKeywordRecognizerです。これはUnity5.4から搭載された、UnityEngine.Windows.Speechのクラスの一つです。10行目で認識したい言葉と、System.Actionを対応づけるためにDictionaryを定義し、13行目からのStartメソッドで言葉とイベント駆動させたいメソッドを定義しています。次に、32行目でKeywordRecognizerのインスタンスを生成し、35行目で発生させたいメソッドを登録して、36行目で音声認識を開始しています。最後に、18と26行目で発行したOnResetとOnDropメソッドですが、これもGestureの章で使ったSphereCommands.csに追加します。giste9e5a3f03ddbd5e21f3cb7e712f47a5827行目のOnResetでrigidbodyコンポーネントを取り去り、sphereの位置を最初の位置に戻しています。41行目のOnDropはGestureの章で使ったOnSelectを呼ぶことでボール落下を実現しています。ちなみに、SpeechManager.csのStartメソッドで好きな言葉を登録し、keywordRecognizer.OnPhraseRecognizedで実行させたいメソッドを登録すれば、好きな言葉で音声認識ができます。Textであれば、ローマ字で記述しておくことで、擬似的に日本語を認識させることができます。実際に試したところ、日本語の文字を指定した場合、例えば"小さく"、"ちいさく"のような場合は認識してくれませんでしたが、"kaiten"のようにローマ字入力したら認識してくれました。そのときのソースコードを参考までに貼りました。10で"生麦生米生卵"をローマ字表記にして認識されたので、ローマ字表記は割とありだと思います。soundここではサウンドエフェクトの鳴らし方、立体音響の制御方法を解説しています。VRでも同様ですが、立体音響は没入感を高めるためにはとても重要です。Docsの詳細ページによると、最後の方に以下の記述がありました。Docsどうやら、HoloLensでは48kのサンプルレートでの再生のみがサポートされているようです。APIを呼ぶ場合、使う音源のサンプルレートを48kに合わせておく必要があります。特有のAPIを使うソースコードの記述はなく、Unityで3D音源を使うときの設定をするだけです。Spatializerに指定します。OrigamiCollectionオブジェクトに、AmbienceのWavファイルをdrugすると、AudioSourceコンポーネントが自動的に追加され、Ambienceのwavファイルも設定されます。このサンプルでは二つの機能を体験できます。1つめは空間音響そのものです。HoloLensでアプリを実行すると、和風の音楽が流れます。Origamiに近づくと音が大きく鳴り、Origamiの後ろ側に立つと、後ろで鳴っているように聞こえます。Origamiから遠ざかると音が小さくなります。二つめは、OnCollisionEnter、OnCollisionStay、OnCollisionExitを利用して音を鳴らす例です。AirTapか音声認識によってSphereを転がすと、衝突間近と転がる時(衝突するとき)に連続的に音が鳴ります。章とは異なり、これは100%HoloLens特有の話です。ここでは大きく2種類の機能を説明しています。MappingというPrefabを使うことで、HoloLensを通した実空間をメッシュ表示して重ねて見ることができます。アプリを動かしてからsphereをAirTapすると、sphereが転がり落ちて、目の前の床に転がります。TapToPlaceParent.csを追加しています。gist45b84fc58f92a86ae0b40f5acacf37379行目のOnSelectを呼ぶ、すなわち、StageをAirTapした場合、placingのフラグがtrueになります。これにより、Update内の処理が連続的に実行されます。38-44行目の処理では、raycastが連続的に実行されており、ここで取得した位置にStageオブジェクトを移動させています。一度AirTapすると、12行目の処理によりToggle処理が働き、Update内の処理が実行されなくなるので、Stageオブジェクトが止まります。私がチュートリアル通りに進めた時は、StageをAirTapしても何も起きませんでした。後日再確認してみようと思います。さんのご指摘で直してみたら動きました。さん、ありがとうございます。Academy101を解説しました。全訳ではなく、元の文章や動画で特に気にした方が良い点、ソースコードの解説をしています。動かすと、こうなります。fun最後は、Sphereを転がした時に別のオブジェクトを表示させる例です。こちらもOnCollisonEnterを使っています。ボールがOrigamiに衝突すると何かが起こります。タイトルにfunとあり、何が起こったかを動画でも見せていないので、ここでも詳細は書かないことにします。確かに、ちょっと意外で面白い感じでした。endこのチュートリアルによってできるようになったことを紹介しています。解説することがないので省略します。終わりに今回、自分の理解も兼ねてソースコードの内容解説や、UnityでのAPIとの関係性を追加してみました。kitを使うことが前提となるので、HoloToolKitの使い方も徐々に覚えていきたいと思います。holograms」の解説(Chapter3まで)少し空いてしまいましたが、次は240の内容を整理しました。Academyについてです。Academyについてです。»ProfileAR、MR、VR、Babylon.jsを中心とした技術ブログです。広く色々な技術を勉強するのが好きで、あれこれ書いています。詳細なプロフィールはこちらをご確認ください。2020)■プライバシーポリシー■こちらに記載しておりますのでご確認ください。■お問い合わせ■こちらよりお願いいたします。月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。