HoloLensでuGUIを使う(MRTK 2017.2.1.0版)

HoloLensでメニューなどのUIを作成する時には、MRTKのUXディレクトリにある、MixedRealityDesignLabs発祥のコンポーネントを使うことが推奨されています。
ところが、UXディレクトリのコンポーネントは従来のUnityのUIシステムであるuGUIとは使い勝手がかなり異なるため、なかなか思い通りに扱うのが大変です(私も勉強中です・・・)
ですので、使い慣れていてノウハウも蓄積されているuGUIをHoloLensで使用するプロジェクトも多いのではないかと思います。
HoloLensでuGUIを使う方法ですが、様々な情報元があります。例えば下記のUnity公式フォーラムでまとまっている内容などです。

この内容は、当時は正しかったのですが、MRTKのバージョンが変わるにつれて不正確な部分も出てきていますので、MRTK 2017.2.1.0で試した内容をまとめておきます。

1.InputManagerを用意する

Mixed Reality Toolkit > Configure > Apply Mixed Reality Scene Settings を選択します。
config
表示されたウインドウで
□Add the Input Manager Prefab
にチェックを入れてApplyをクリックすると、シーンにInputManagerが配置されます。(既にシーンを作りこんでいる場合は新規シーンでお試しください)
InputManagerの子オブジェクトにEventSystemがあり、更にその子オブジェクトにRaycastCameraがあります。
また、InputManagerにFocusManagerがアタッチされています。
このRaycastCamera(次期バージョンではUIRaycastCameraに変わる予定)とFocusManagerがuGUIオブジェクトへの当たり判定などを管理するので、HoloLensでもuGUIが使用できるようになります。

2.Canvasを用意する

まだCanvasがシーンに無ければ、ButtonなどのUI部品を作成するとCanvasがシーンに生成されます。このCanvasのインスペクタで、Render Modeを「World Space」に変更します。すると、下記のダイアログが出てきます。
dialog
OKをクリックすると、CanvasのCameraに「RaycastCamera」がアサインされます。
以上の操作でuGUIへの当たり判定やイベントが発生するようになるので、いままでのuGUIの作り方でUIを作成することができます。
注意点として、上記で設定したCanvas自体をprefab化することはできません。もし何かをAirTapしたときにダイアログなどを生成して、不要になったら削除する、ということをしたい場合は、PanelなどにUI部品をまとめて、Panelをprefab化し、Canvasの子要素としてInstantiateします。
(お好みでPanelにBillboardやTagalongをアタッチしておきます)
panel

//インスペクタから設定
public GameObject panelDialog;
public Canvas guiCanvas;
//ダイアログ表示
public void Some_Object_tapped()
{
     var dialog = Instantiate(panelDialog);
     dialog.SetParent(guiCanvas.tansform,false);
}
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク