この記事はOculus Rift Advent Calendar 2017の12日目の記事になります。
はじめに
MixedRealityToolkit-Unity(HoloToolkit-Unity)は日々更新されているためなかなか追いかけるのが大変ですが、最新状況を把握するために(Unity 2017 1.2系対応版ではなく)現状のHoloToolkit-Unity-Examplesついて調べてみました。
環境
- Unity 2017.2.0f3(Unity 2017.2.0p1-MRTP4だとUnityエディタでクラッシュが頻発したため)
- HoloToolkitについてはUnity 2017.2系に対応したunitypackageがまだないため、2017/12/12時点で最新のmasterブランチのHoloToolkitとHoloToolkit-ExamplesをUnityに取り込んで利用
以降、Project Viewに表示されているフォルダ階層順に記載しています。サンプルシーンの数が多かったため、すべてUnityエディタ上での確認になりますが、それぞれ端的に何をしているシーンなのかを書きました。カタログ的な使い方として参照いただければ幸いです。README.mdがあるものにはリンクを貼っておいたので詳細はそちらをご参照ください。
AdaptiveQuality (README)
AdaptiveQualityExampleScene
安定したフレームレートを維持するための適応型ビューポート解像度を実装する方法を示すサンプル。
Boundary
BoundaryTest
フロアオブジェクトを配置し、領域内にオブジェクトがあるかどうかの判定を行うサンプル(Unityエディタでは判定動作はしません)。
ColorPicker (README)
ColorPickerExample
カラーピッカーのサンプル。
FastConfigurableShader
DoubleSidedTest
シェーダ設定をインスペクタから操作可能としたサンプル。
FastConfigurableTest
同上
GazeRuler (README)
GazeRulerExample
空間の距離と面積を計測するサンプル。
GazeRulerTest
2点間に正しく線を引くテストシーン。
Input
BasicCursor
BasicCursorプレハブを利用したサンプル。
CanvasUiRaycasts
uGUIとのインタラクションを行うサンプル。
Cursor
Cursorプレハブを利用したサンプル。
CursorWithFeedback
CursorWithFeedbackプレハブを利用したサンプル。
DictationTest
ユーザーの音声を認識し、テキストに変換するサンプル。
FocusedObjectKeywords
音声でオブジェクトを操作するサンプル。グリッド上にオブジェクトを配置するスクリプトも利用。
GamepadTest
ゲームコントローラーを利用したサンプル。
GazeEvents
ゲイズイベントのサンプル。オブジェクトに視線をフォーカスON/OFFすることでアクティブのON/OFF、光源の強弱を変更する。
InputManagerTest
様々なインプットを扱ったサンプル。
InputNavigationRotateTest
ナビゲーションジェスチャーのサンプル(INavigationHandlerの実装サンプル)。
InputTapTest
タップのサンプル(IInputClickHandlerの実装サンプル)。
InteractiveMeshCursor
InteractiveMeshCursorプレハブを利用したサンプル。
KeyboardTest
キーボード入力のサンプル。
ManualCameraControl
(おそらく)Unityエディタ上でカメラをキーボードやマウスで操作できるManualGazeControlに関するサンプル。MixedRealityCameraプレハブに標準機能として取り込まれているのであまり意味はなさそう。
MicrophoneStream
マイクを利用したサンプル。
MotionControllerTest
モーションコントローラを利用したサンプル。
OverrideFocusedObjectTest
フォーカスしていなくてもオブジェクトをタップ可能とするInputManagerのOverrideFocusedObjectに関するサンプル。
SelectedObjectKeywords
何のサンプルか不明(上記FocusedObjectKeywordsのほうが参考になりそう)。
SpeechInputSource
音声入力のサンプル。
TapToPlace
オブジェクトをタップジェスチャーにより現実世界に沿って移動可能とするサンプル。GazeManager, WorldAnchorManager, およびSpatialMappingManagerを利用する。
XboxControllerExample
Xboxコントローラを利用したサンプル。
Medical (README)
MedicalExample
(2D画像スライスの形式で)医用画像データをインポートし、HoloLensで表示および操作するサンプル。
MotionControllers-GrabMechanics (README)
GrabMechanics
モーションコントローラを利用し、様々なタイプのつかむ操作を実装したサンプル。
Prototyping (README)
ClickThroughExample
パネルやインタラクティブなボタンの表示、操作を扱うサンプル。
ColorCycleSwitcher
エアタップと水平ジェスチャーを処理するコントロールを生成するサンプル。エアタップで色を変更し、ドラッグすると前後の色に変更する。
CycleArray
ベクトル、色、テクスチャなどの配列をインクリメントするためのシステムのサンプル。タップによりインスペクタで設定した値を循環していく。
PanelLayout
プリミティブを用いてワイヤフレームを作成するサンプル。
PositionAnObject
パネル上でタップすると移動を開始し、次のタップ(パネルをGazeしている必要はない)で動きを止めるサンプル。
Primitives
プロトタイプ用に用意されたプリミティブなオブジェクトを一覧表示したサンプル。
ScaleObjectByDistance
タップによりスケール変更を開始するサンプル。タップ後近づくとスケールダウン、離れるとスケールアップする。次のタップ(パネルをGazeしている必要はない)でスケール変更を止める。
Sharing
RoomAndAnchorTest
ルームとワールドアンカーに関するサンプル。
SharingSpawnTest
オブジェクトを生成し同期するサンプル。
SharingTest
シェアリングのサンプル。
SpatialMapping
PlaneFinding
あらかじめFakeSpatialMappingMeshデータが用意されており、Unityエディタ上で平面検出の確認ができるサンプル。
RemoteMapping
スキャンした空間メッシュデータをUnityに転送し、保存や読み込みができるサンプル。
SaveSpatialMapping
Unityエディタ上で空間メッシュデータを保存・読み込むサンプル。(SceneオブジェクトのKeyword Managerコンポーネントが剥がれているため修正しないとメッシュの保存はできない)
参考:HoloLens MixedRealityToolkit-Unity SavingSpatialMeshes
SpatialMappingExample
空間メッシュとオブジェクトの衝突判定サンプル。タップするとキューブが生成されメッシュの上に落ちる。
SpatialMappingTap
Spatial Mappping Tapシェーダを利用したサンプル。(タップするとパルスが空間メッシュに広がっていくものだと思いますが動作しませんでした・・)
SpatialProcessing
(凸凹している)空間メッシュをきれいな平面に変換するサンプル。
SpatialSound
AudioOcclusionTest
音声のオクルージョン確認のサンプル。壁の手前と奥で音声の聞こえ方が変わります。
UAudioManagerTest
UAudioManager(HoloToolkitで提供されるいわゆるサウンドマネージャのようなもの)のサンプル。
SpatialUnderstanding
SaveSpatialUnderstanding
SaveSpatialMappingのSpatialUnderstanding版サンプル。
SpatialUnderstandingExample
SpatialUnderstandingのサンプル。
Utilities
ApplicationViewManager
コンポーネント情報が壊れているため不明。
CheckAPI
UniversalApiContractの対応状況をチェックするサンプル。Unityエディタではすべてfalseが返る。
FixedAngularSize
カメラからの位置に関係なくオブジェクトをビュー内に一定のサイズで表示するためのサンプル。(実際の動作としてはオブジェクトに近づくとオブジェクトが小さくなり、離れるとオブジェクトが大きくなっている)
HeadsUpDirectionIndicator
座標軸の方向を示すインジケーターを表示するサンプル。
SceneLauncher
シーンランチャーのサンプル。Build SettingsのScenes In BuildにあるシーンをScene LauncherコンポーネントのScene Mappingに追加しチェックをいれるとGame viewに表示され、切り替え可能になる。下図ではScene Launcherの音声コマンドかBackspaceキーで元のシーンに戻る。
SphereBasedTagalong
ユーザが移動するとオブジェクトが動きに追従するサンプル。
StabilizationPlaneSetting
オブジェクトの表示が乱れるのを減らすためのサンプル。
参考:Case study - Using the stabilization plane to reduce holographic turbulence
TextToSpeechManager
TextToSpeech(テキストを音声に変換する)のサンプル。
WindowOcclusion
WindowOcclusionシェーダを利用したサンプル。
UX (README)
GestureInteractiveExample
(Interactiveを継承した)GestureInteractiveに関するサンプル。
InteractableObjectExample
インタラクティブなオブジェクトに関するサンプル。
InteractiveButtonComponents
ボタンコンポーネントのサンプル。
InteractiveElementInstantiate
インタラクティブなエレメントの生成サンプル。
InteractiveExample
インタラクティブな操作(タップ、長押し、フォーカス等)のサンプル。
LineExamples
ラインを描画するサンプル。
ObjectCollectionExample
オブジェクトコレクションのサンプル。
SliderSamples
スライダーのサンプル。
TextPrefabSamplesTest
テキストプレハブ(3DTextShaderを利用)のサンプル。
UsabilityScalerTest
ユーザービリティを考慮してスケールを自動調整するサンプル
おわりに
かなりの数のサンプルがありますが、一つ一つはシンプルな作りになっているので実装内容については把握しやすいのではないかと思います。気になったものがあればぜひ詳細を確認してみてください。もし間違っているものなどあればご指摘いただければ幸いです。
明日は@morio36さんの記事になります。