Unity UI のスクロール機能を使う場合、スクロール領域からはみ出た部分はマスクし非表示にしますが、MRTK を利用する際は注意が必要となります。
結論
- 深度バッファーのフォーマットを 24bit にする(MRTK では 16bit が推奨されている)
- または、Mask の代わりに RectMask2D を利用する
以降で、順を追って確認していきます。
確認環境
- Unity 2019.2.21f1
- MRTK v2.4.0
作業内容
Unityのプロジェクトを新規作成し、MRTK(v2.4.0)をインポートする
メニューの [Mixed Reality Toolkit] > [Add to Scene and Configure...] を選択する
Canvas を配置する
Canvas の位置・サイズを任意の値に調整する(以下は例)
Canvas のインスペクターにある「Convert to MRTK Canvas」ボタンを押す
以下のようにRender Mode が World Space になり、Canvas Utility コンポーネントが追加されている。また、Add NearInteractionTouchableUnityUI ボタンがあるので押す
すると、Near Interaction Touchable Unity UI コンポーネントが追加される
NearInteractionTouchableUnityUI の Events To Receive を Pointer に変更する
Canvas に Scroll View を配置する
Scroll View > Viewport > Content に Text を配置する(Textにはスクロールが確認できるように任意の文字列をいれる)
Text の Rect Transform のAnchor Presets は、stretch/stretch を選択する(Shift + Alt を押すと表示される中の一番右下の項目)
ここで MRTK で推奨されている XR Settings の Depth Format を 16-bit depth でビルドをする
UnityEditor上では問題なく見えていたが、実機では以下のようにMaskが正しく機能していない(16-bit depthの場合ステンシルバッファーが作成されないことが原因)
Depth Format を 24-bit depth に変更することで正しく表示される
Depth Format を 16-bit depth のままとする場合には、Mask の代わりに RectMask2D を使うことで同様の結果を得ることができる
参考
Unity UI でニアインタラクションをおこなうための設定(特にUnity UIの部分)
マスク機能を使う場合の注意点