yotiky Tech Blog

とあるエンジニアの備忘録

MRTK v2 - Button (How to use)

目次

TL;DR

Mixed Reality Toolkit Documentation の UX Building Blocks の章の Button から要点と補足をまとめたページです。

検証環境

  • Unity:2019.2.7f2
  • MRTK:2.3.0 / 2.4.0
  • VisualStudio:2019
  • Device:HoloLens2

内容

ドキュメントは2.4をベースに書かれている。
詳細はこちら。 microsoft.github.io

非公式日本語はこちら。 hololabinc.github.io

How to use pressable buttons

2D(uGUI)向け

基本的な使い方は以下の通り。

  • MRTK Canvas に変換する

    f:id:yotiky:20200603215219p:plain:w300

  • [NearInteractionTouchableUnityUI]コンポーネントを追加

    f:id:yotiky:20200603215428p:plain:w300

  • Scale を 0.001 に

    f:id:yotiky:20200603215608p:plain:w300

  • Unity UI 向けのボタンを追加する

    • UnityUIInteractableButton.prefab
    • PressableButtonUnityUI.prefab
    • PressableButtonUnityUICircular.prefab
    • PressableButtonHoloLens2UnityUI.prefab

3D

基本的な使い方は以下の通り。

  • コライダーベースのボタンをシーンに追加する
  • テキストとアイコンを変更する(2.4であればButtonConfigHelper)

    f:id:yotiky:20200603231536p:plain:w300

  • Interactable スクリプト(2.4であればButtonConfigHelper)で

    • Events の OnClick() に呼び出し先を登録する

    f:id:yotiky:20200603232622p:plain:w300

    • General の Speech Command で音声コマンドを選び、ラベルを修正する

      f:id:yotiky:20200603233117p:plain:w300

      音声コマンドはMixedRealityToolkitのプロファイルで登録されているものから選ぶことになる

      f:id:yotiky:20200603233043p:plain:w300

      音声コマンドを無効化するには、音声コマンドを[No Selection]にして、ラベルを無効化すればいけそう?(未確認)

Inspector properties

PressableButtonHoloLens2 ボタンに登録されているコンポーネントf:id:yotiky:20200604003001p:plain:w400

  • PressableButtonHoloLens2 は、MRTKのボタンを構成する最もベースの動きを提供する
  • PhysicalPressEventRouter は、PressableButton のイベントを Interactable にルーティングする
  • Interactable は、ユーザー操作に対する動きや他のスクリプトとのインターフェスを担う
  • NearInteractionTouchable は、コライダーを持つオブジェクトをユーザーが触れるようになる
  • ButtonConfigHelper は、テキストとアイコン、OnClick イベントのハンドリングがここでできるようになっている(2.4のみ)

スクリプトの関連はYoonさんのセッション動画のスライドが分かりやすかった。 *1 f:id:yotiky:20200604001439p:plain:w500

OnClick に関しては PhysicalPressEventRouter で発火のタイミングを選択できる。
Interactable の Receivers には Press や Touch も選べるので、詳細を変更しようとしない限りは直接 PressableButtonHoloLens2 を触らなくても良さそう。
Near Interaction、Far Interaction の両方の動きをサポートするには Interactable の OnClick を使う必要がある。

Toggle では、Interactable の General に項目が追加される。Receviers では Toggle を選べる。
f:id:yotiky:20200604013440p:plain:w300 f:id:yotiky:20200604013749p:plain:w300

こちらもセッション動画のスライド。
f:id:yotiky:20200604013858p:plain:w500

How to change the icon and text

2.4なら ButtonConfigHelper から編集できる。

f:id:yotiky:20200604003436p:plain:w300

アイコンは[Icon Set]というアイコンをグループ化したセットで管理するようだ。

f:id:yotiky:20200604005123p:plain:w300

Examples パッケージには以下のセットが含まれている。

f:id:yotiky:20200604005255p:plain:w300

2.3ならこのあたりで直接編集する。

f:id:yotiky:20200603231536p:plain:w300

Creating a HoloLens Icon Font Asset

C:/Windows/Fonts/holomdl2.ttf をUnityにインポートする。Explorer上だとこんな表示。

f:id:yotiky:20200604005655p:plain:w300

初回作成時は、[Select Font Asset]は空のままで良さそう。
Character Sequence (Hex) の値。

E700-E702,E706,E70D-E70E,E710-E714,E718,E71A,E71D-E71E,E720,E722,E728,E72A-E72E,E736,E738,E73F,E74A-E74B,E74D,E74F-E752,E760-E761,E765,E767-E769,E76B-E76C,E770,E772,E774,E777,E779-E77B,E782-E783,E785-E786,E799,E7A9-E7AB,E7AF-E7B1,E7B4,E7C8,E7E8-E7E9,E7FC,E80F,E821,E83F,E850-E859,E872-E874,E894-E895,E8A7,E8B2,E8B7,E8B9,E8D5,E8EC,E8FB,E909,E91B,E92C,E942,E95B,E992-E995,E9E9-E9EA,EA37,EA40,EA4A,EA55,EA96,EB51-EB52,EB65,EB9D-EBB5,EBCB-EBCC,EBCF-EBD3,EC03,EC19,EC3F,EC7A,EC8E-EC98,ECA2,ECD8-ECDA,ECE0,ECE7-ECEB,ED17,EE93,EFA9,F114-F120,F132,F181,F183-F186

f:id:yotiky:20200604010125p:plain:w300

ちょっと古いがこの辺の記事を見ると理解が進む。
Generateが完了したら任意の場所に保存。187個もあるらしい。

f:id:yotiky:20200604010233p:plain:w300

Projectウィンドウでメニューから[Create > Mixed Reality Toolkit > Icon Set]で新しいアセットを作成する。
[Char Icon Font] に作成した Font Asset を突っ込むと読み込まれる。

f:id:yotiky:20200604010731p:plain:w300

Available Icons でクリックすると下の Selected Icons に追加される。逆に Selected Icons でクリックすると消える。
Selected Icons に追加されているアイコンが ButtonConfigHelper で選択できるようになる。
Name をつけるとスクリプト上からアイコンを識別できる。

f:id:yotiky:20200604012106p:plain:w300

Icon Set を変更して任意のアイコンを選択する。

f:id:yotiky:20200604010949p:plain:w300 f:id:yotiky:20200604010922p:plain:w300