演習 - ボタンと動的メニューのパネル
入力を提供するには、いくつかの方法があります。 入力によって特定のイベントがトリガーされ、いくつかの変更が実行されます。 UI コンポーネントは、ユーザーがシーン上のホログラムを操作する場合に役立ちます。
ボタンの静的パネルを作成する
[階層] ウィンドウで、 RoverExplorer オブジェクトを右クリックし、[ 空の作成 ] を選択して、空のオブジェクトを RoverExplorer の子として追加します。 オブジェクトに Buttons という名前を付け、 Transform コンポーネントを次のように構成します。
- 位置: X = -0.6、Y = 0.036、Z = -0.5
- 回転: X = 90、Y = 0、Z = 0
- スケール: X = 1、Y = 1、Z = 1
プロジェクトウィンドウで、Assets>MRTK.Tutorials.GettingStarted>Prefabs フォルダーに移動し、PressableCylinderButton プレハブを Buttons オブジェクトにドラッグします。次に、PressableCylinderButton を右クリックして、複製 を選択し、コピーを作成します。これを Buttons の下に3つの PressableCylinderButton オブジェクトが揃うまで繰り返します。
TextMesh Pro のインポートを求めるメッセージが表示されます。 [Import TMP Essentials]\(TMP Essentials のインポート\) の最初のオプションを選択します。
[階層] ペインで Buttons オブジェクトを選択し、[インスペクター] ウィンドウで [コンポーネントの 追加 ] を選択して オブジェクト バー コンポーネントを追加します。 次のように構成します:
- オブジェクト バーのフロー方向: 水平
- 間隔: X = 0.2、Y = 0
[ボタン] の下の各オブジェクトをオブジェクト バー コンポーネントの[オブジェクト バー オブジェクト] リストに割り当てます。
[階層] ウィンドウで、ボタンにそれぞれ ヒント、分解、リセット という名前を付けます。 ボタンごとに、ボタン名と一致するように、Pressable Button コンポーネントの Advanced StatefulInteractable Settings の SpeechRecognitionKeyword プロパティを変更します。
[階層] ウィンドウで[ ヒント ] ボタン オブジェクトを選択し、[インスペクター] ウィンドウで、 PressableButton.OnClicked () イベントを次のように構成します。
- RoverAssembly オブジェクトを なし (オブジェクト) フィールドに割り当てる
- [ 関数なし ] ドロップダウン リストから PlacementHintsController>TogglePlacementHints () を選択して、イベントがトリガーされたときに実行されるアクションとしてこの関数を設定します。
[階層] ペインで、分解 ボタン オブジェクトを選択し、[インスペクター] ウィンドウで、PressableButton.OnClicked () イベントを次のように構成します。
- RoverAssembly オブジェクトを なし (オブジェクト) フィールドに割り当てる
- [No Function]\( 関数なし \) ドロップダウンから 、ExplodedViewController>ToggleExplodedView() を選択して、イベントがトリガーされたときに実行されるアクションとしてこの関数を設定します。
[再生] ボタンを押してゲーム モードに切り替えます。 スペース バーを長押しして手をアクティブにしてから、マウスを使用して ヒント ボタンを押して、配置ヒント オブジェクトの表示/非表示を切り替えます。
[分解] ボタンを押すと、立体分解図のオンとオフが切り替わります。
リセット ボタンは 、モジュールの後半で実装します。
ユーザーの後に続く動的メニューを作成する
プロジェクト ウィンドウで、 Packages>MRTK UX Components>Near Menu フォルダーに移動し、 NearMenuBase プレハブをクリックして階層ウィンドウにドラッグし、変換 位置 を X = 0、Y = -0.4、Z = 0 に設定し、次のように構成します。
- [SolverHandler] コンポーネントの [Tracked Target Type](追跡対象の種類) が [Head] に設定されていることを確認します。
- RadialView ソルバー コンポーネントの横にあるチェックボックスをオンにして、既定で有効にします。
[階層] ウィンドウで、オブジェクトの名前を Menu に変更し、その MenuContent-HorizontalLayout (メニューとピン) > Buttons-GridLayout (ボタン) 子オブジェクトを展開して、次の 3 つのボタンを表示します。
Buttons-GridLayout (ボタン) の最初のボタンの名前を Indicator に変更し、[階層] ウィンドウで、次のように Indicator ゲーム オブジェクトを構成します。
- Frontplate > AnimatedContent > Icon > Label オブジェクトを選択し、TextMesh Pro コンポーネントをボタンの名前と一致するように変更します。 階層内で Label オブジェクトがアクティブになっていることを確認します。
- PressableButton.OnClicked() イベントを構成します。まず、シェブロンのような Indicator オブジェクトを None (Object) フィールドに割り当て、次に > ドロップダウンから GameObject SetActive (bool) を選択します (引数のチェックボックスが選択されていることを確認します)。
- UIButtonFontIcon オブジェクト>、Frontplate > AnimatedContent > Icon を選択し、アイコンをフォント アイコン セレクター コンポーネントの検索アイコンに変更します。 これはアイコンの一覧で確認するか、 現在のアイコン名 を アイコン 130 に設定します。
シェブロン インジケーター オブジェクトを無効にするには、[階層] ウィンドウで、シェブロンのようなインジケーター オブジェクトを選択し、[インスペクター] ウィンドウで次の操作を行います。
- 名前の横にあるチェックボックスを選択解除することで、デフォルトで無効にします。
- [コンポーネントの追加] ボタンを使用して、方向インジケーター コントローラー (スクリプト) コンポーネントを追加します。
2 番目のボタンの名前を TapToPlace に変更し、[階層] ウィンドウで 次のように TapToPlace ゲーム オブジェクトを構成します。
- Frontplate > AnimatedContent > Icon > Label オブジェクトを選択し、TextMesh Pro コンポーネントをボタンの名前と一致するように変更します。 階層内で Label オブジェクトがアクティブになっていることを確認します。
- RoverExplorer > オブジェクトを [なし] (オブジェクト) フィールドに割り当て、[関数なし] ドロップダウンから TapToPlace>bool Enabled を選択して、PressableButton.OnClicked() イベントを構成します (引数のチェック ボックスがオンになっていることを確認します)。
- UIButtonFontIcon オブジェクトの Frontplate > AnimatedContent > Icon >を選択し、アイコンをフォント アイコン セレクター コンポーネントの手のアイコンに変更します。 これはアイコンの一覧で確認できます。または、[ 現在のアイコン名] を [アイコン 13] に設定します。
[階層] ウィンドウで RoverAssembly オブジェクトを選択し、[インスペクター] ウィンドウで、次のように Tap To Place (スクリプト) コンポーネントを 構成します。
- 名前の横にあるチェックボックスのチェックを外して、デフォルトで非アクティブにする。
- On Placing Stopped () イベント セクション内で、+ アイコンを選択して新しいイベントを追加します。
- RoverExplorer>RoverAssembly オブジェクトをNone (Object) フィールドに割り当てます。
- [ 関数なし ] ドロップダウンから TapToPlace>bool Enabled を選択し、イベントがトリガーされたときにこのプロパティ値を更新します。
- 引数のチェック ボックスがオフになっていることを確認 します。






![[ヒント] ボタンが押されている Unity 再生モードの分割ビューのスクリーンショット。](media/hint-button-pressed.png)






