HoloLensでメニューなどのUIを作成する時には、MRTKのUXディレクトリにある、MixedRealityDesignLabs発祥のコンポーネントを使うことが推奨されています。
ところが、UXディレクトリのコンポーネントは従来のUnityのUIシステムであるuGUIとは使い勝手がかなり異なるため、なかなか思い通りに扱うのが大変です(私も勉強中です・・・)
ですので、使い慣れていてノウハウも蓄積されているuGUIをHoloLensで使用するプロジェクトも多いのではないかと思います。
HoloLensでuGUIを使う方法ですが、様々な情報元があります。例えば下記のUnity公式フォーラムでまとまっている内容などです。
Mixed Reality Toolkit > Configure > Apply Mixed Reality Scene Settings を選択します。
表示されたウインドウで
□Add the Input Manager Prefab
にチェックを入れてApplyをクリックすると、シーンにInputManagerが配置されます。(既にシーンを作りこんでいる場合は新規シーンでお試しください)
InputManagerの子オブジェクトにEventSystemがあり、更にその子オブジェクトにRaycastCameraがあります。
また、InputManagerにFocusManagerがアタッチされています。
このRaycastCamera(次期バージョンではUIRaycastCameraに変わる予定)とFocusManagerがuGUIオブジェクトへの当たり判定などを管理するので、HoloLensでもuGUIが使用できるようになります。
まだCanvasがシーンに無ければ、ButtonなどのUI部品を作成するとCanvasがシーンに生成されます。このCanvasのインスペクタで、Render Modeを「World Space」に変更します。すると、下記のダイアログが出てきます。
OKをクリックすると、CanvasのCameraに「RaycastCamera」がアサインされます。
以上の操作でuGUIへの当たり判定やイベントが発生するようになるので、いままでのuGUIの作り方でUIを作成することができます。
注意点として、上記で設定したCanvas自体をprefab化することはできません。もし何かをAirTapしたときにダイアログなどを生成して、不要になったら削除する、ということをしたい場合は、PanelなどにUI部品をまとめて、Panelをprefab化し、Canvasの子要素としてInstantiateします。
(お好みでPanelにBillboardやTagalongをアタッチしておきます)
//インスペクタから設定 public GameObject panelDialog; public Canvas guiCanvas; //ダイアログ表示 public void Some_Object_tapped() { var dialog = Instantiate(panelDialog); dialog.SetParent(guiCanvas.tansform,false); }