Hiromuブログ

最近はこちら(https://zenn.dev/hiromu)が本体

HoloToolkit-Unity-Examplesカタログ

この記事は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

安定したフレームレートを維持するための適応型ビューポート解像度を実装する方法を示すサンプル。

AdaptiveQualityExampleScene


Boundary

BoundaryTest

フロアオブジェクトを配置し、領域内にオブジェクトがあるかどうかの判定を行うサンプル(Unityエディタでは判定動作はしません)。

BoundaryTest


ColorPicker (README)

ColorPickerExample

カラーピッカーのサンプル。

ColorPickerExample


FastConfigurableShader

DoubleSidedTest

シェーダ設定をインスペクタから操作可能としたサンプル。

DoubleSidedTest

FastConfigurableTest

同上

FastConfigurableTest


GazeRuler (README)

GazeRulerExample

空間の距離と面積を計測するサンプル。

Geometry

GazeRulerTest

2点間に正しく線を引くテストシーン。


Input

BasicCursor

BasicCursorプレハブを利用したサンプル。

BasicCursor

CanvasUiRaycasts

uGUIとのインタラクションを行うサンプル。

CanvasUiRaycasts

Cursor

Cursorプレハブを利用したサンプル。

CursorWithFeedback

CursorWithFeedbackプレハブを利用したサンプル。

DictationTest

ユーザーの音声を認識し、テキストに変換するサンプル。

DictationTest

FocusedObjectKeywords

音声でオブジェクトを操作するサンプル。グリッド上にオブジェクトを配置するスクリプトも利用。

FocusedObjectKeywords

GamepadTest

ゲームコントローラーを利用したサンプル。

GamepadTest

GazeEvents

ゲイズイベントのサンプル。オブジェクトに視線をフォーカスON/OFFすることでアクティブのON/OFF、光源の強弱を変更する。

GazeEvents

InputManagerTest

様々なインプットを扱ったサンプル。

InputManagerTest

InputNavigationRotateTest

ナビゲーションジェスチャーのサンプル(INavigationHandlerの実装サンプル)。

InputTapTest

タップのサンプル(IInputClickHandlerの実装サンプル)。

InteractiveMeshCursor

InteractiveMeshCursorプレハブを利用したサンプル。

InteractiveMeshCursor

KeyboardTest

キーボード入力のサンプル。

KeyboardTest

ManualCameraControl

(おそらく)Unityエディタ上でカメラをキーボードやマウスで操作できるManualGazeControlに関するサンプル。MixedRealityCameraプレハブに標準機能として取り込まれているのであまり意味はなさそう。

MicrophoneStream

マイクを利用したサンプル。

MicrophoneStream

MotionControllerTest

モーションコントローラを利用したサンプル。

MotionControllerTest

OverrideFocusedObjectTest

フォーカスしていなくてもオブジェクトをタップ可能とするInputManagerのOverrideFocusedObjectに関するサンプル。

SelectedObjectKeywords

何のサンプルか不明(上記FocusedObjectKeywordsのほうが参考になりそう)。

SpeechInputSource

音声入力のサンプル。

SpeechInputSource

TapToPlace

オブジェクトをタップジェスチャーにより現実世界に沿って移動可能とするサンプル。GazeManager, WorldAnchorManager, およびSpatialMappingManagerを利用する。

XboxControllerExample

Xboxコントローラを利用したサンプル。

XboxControllerExample


Medical (README)

MedicalExample

(2D画像スライスの形式で)医用画像データをインポートし、HoloLensで表示および操作するサンプル。

MedicalExample2


MotionControllers-GrabMechanics (README)

GrabMechanics

モーションコントローラを利用し、様々なタイプのつかむ操作を実装したサンプル。

GrabMechanics


Prototyping (README)

ClickThroughExample

パネルやインタラクティブなボタンの表示、操作を扱うサンプル。

ClickThroughExample

ColorCycleSwitcher

エアタップと水平ジェスチャーを処理するコントロールを生成するサンプル。エアタップで色を変更し、ドラッグすると前後の色に変更する。

ColorCycleSwitcher

CycleArray

ベクトル、色、テクスチャなどの配列をインクリメントするためのシステムのサンプル。タップによりインスペクタで設定した値を循環していく。

CycleArray

PanelLayout

プリミティブを用いてワイヤフレームを作成するサンプル。

PanelLayout

PositionAnObject

パネル上でタップすると移動を開始し、次のタップ(パネルをGazeしている必要はない)で動きを止めるサンプル。

PositionAnObject

Primitives

プロトタイプ用に用意されたプリミティブなオブジェクトを一覧表示したサンプル。

Primitives

ScaleObjectByDistance

タップによりスケール変更を開始するサンプル。タップ後近づくとスケールダウン、離れるとスケールアップする。次のタップ(パネルをGazeしている必要はない)でスケール変更を止める。

ScaleObjectByDistance


Sharing

RoomAndAnchorTest

ルームとワールドアンカーに関するサンプル。

RoomAndAnchorTest

SharingSpawnTest

オブジェクトを生成し同期するサンプル。

SharingSpawnTest

SharingTest

シェアリングのサンプル。

SharingTest


SpatialMapping

PlaneFinding

あらかじめFakeSpatialMappingMeshデータが用意されており、Unityエディタ上で平面検出の確認ができるサンプル。

PlaneFinding

RemoteMapping

スキャンした空間メッシュデータをUnityに転送し、保存や読み込みができるサンプル。

RemoteMapping

SaveSpatialMapping

Unityエディタ上で空間メッシュデータを保存・読み込むサンプル。(SceneオブジェクトのKeyword Managerコンポーネントが剥がれているため修正しないとメッシュの保存はできない)

参考:HoloLens MixedRealityToolkit-Unity SavingSpatialMeshes

SpatialMappingExample

空間メッシュとオブジェクトの衝突判定サンプル。タップするとキューブが生成されメッシュの上に落ちる。

SpatialMappingTap

Spatial Mappping Tapシェーダを利用したサンプル。(タップするとパルスが空間メッシュに広がっていくものだと思いますが動作しませんでした・・)

SpatialProcessing

(凸凹している)空間メッシュをきれいな平面に変換するサンプル。


SpatialSound

AudioOcclusionTest

音声のオクルージョン確認のサンプル。壁の手前と奥で音声の聞こえ方が変わります。

AudioOcclusionTest

UAudioManagerTest

UAudioManager(HoloToolkitで提供されるいわゆるサウンドマネージャのようなもの)のサンプル。

UAudioManagerTest


SpatialUnderstanding

SaveSpatialUnderstanding

SaveSpatialMappingのSpatialUnderstanding版サンプル。

SpatialUnderstandingExample

SpatialUnderstandingのサンプル。

SpatialUnderstandingExample


Utilities

ApplicationViewManager

コンポーネント情報が壊れているため不明。

CheckAPI

UniversalApiContractの対応状況をチェックするサンプル。Unityエディタではすべてfalseが返る。

CheckAPI

FixedAngularSize

カメラからの位置に関係なくオブジェクトをビュー内に一定のサイズで表示するためのサンプル。(実際の動作としてはオブジェクトに近づくとオブジェクトが小さくなり、離れるとオブジェクトが大きくなっている)

FixedAngularSize

HeadsUpDirectionIndicator

座標軸の方向を示すインジケーターを表示するサンプル。

HeadsUpDirectionIndicator

SceneLauncher

シーンランチャーのサンプル。Build SettingsのScenes In BuildにあるシーンをScene LauncherコンポーネントのScene Mappingに追加しチェックをいれるとGame viewに表示され、切り替え可能になる。下図ではScene Launcherの音声コマンドかBackspaceキーで元のシーンに戻る。

SceneLauncher

SphereBasedTagalong

ユーザが移動するとオブジェクトが動きに追従するサンプル。

StabilizationPlaneSetting

オブジェクトの表示が乱れるのを減らすためのサンプル。

参考:Case study - Using the stabilization plane to reduce holographic turbulence

TextToSpeechManager

TextToSpeech(テキストを音声に変換する)のサンプル。

TextToSpeechManager

WindowOcclusion

WindowOcclusionシェーダを利用したサンプル。

WindowOcclusion

UX (README)

GestureInteractiveExample

(Interactiveを継承した)GestureInteractiveに関するサンプル。

GestureInteractiveExample

InteractableObjectExample

インタラクティブなオブジェクトに関するサンプル。

InteractableObjectExample

InteractiveButtonComponents

ボタンコンポーネントのサンプル。

InteractiveButtonComponents

InteractiveElementInstantiate

インタラクティブなエレメントの生成サンプル。

InteractiveElementInstantiate

InteractiveExample

インタラクティブな操作(タップ、長押し、フォーカス等)のサンプル。

InteractiveExample

LineExamples

ラインを描画するサンプル。

LineExamples

ObjectCollectionExample

オブジェクトコレクションのサンプル。

ObjectCollectionExample

SliderSamples

スライダーのサンプル。

SliderSamples

TextPrefabSamplesTest

テキストプレハブ(3DTextShaderを利用)のサンプル。

TextPrefabSamplesTest

UsabilityScalerTest

ユーザービリティを考慮してスケールを自動調整するサンプル

UsabilityScalerTest


おわりに

かなりの数のサンプルがありますが、一つ一つはシンプルな作りになっているので実装内容については把握しやすいのではないかと思います。気になったものがあればぜひ詳細を確認してみてください。もし間違っているものなどあればご指摘いただければ幸いです。


明日は@morio36さんの記事になります。