本日はMRTK枠です。
先日に引き続きMRTKのサンプルプロジェクトであるDevTemplateのプロジェクトからHandInteractionExamplesを見ていきます。
〇Pinch Interaction
Pinch InteractionはスライダーのUIです。
Pinch Interactionはその名の通りつまみをHandTrackingでつまんで手で動かすことができるスライダーです。
サンプルでは上部に配置されているGemが回転します。
構造としてはスライダー基部であるNonCanvasSliderBase、背景パネルであるBackPlateで構成されています。
BackPlateはただのメッシュであり、特に機能を持っていませんがMRGTで提供されているNon-CanvasのBackplateシェーダーを使用しています。
一方でNonCanvasSliderBaseオブジェクトはスライダーにかかわる多くの機能を持っています。
〇Sliderコンポーネント
SliderコンポーネントはPinchSliderのコアに相当するコンポーネントです。
MRTK3ではXR Interaction Toolkitに乗っ取って機能が提供されていますが、Sliderコンポーネントも同様にXRinteractionToolkitをオーバーライドする形で構成されています。
〇Sliderのイベント
スライダー操作時のイベントはSlider EventsのOn Value Updated(SliderEventData)のイベントリストで行うことができます。
スライダーの値を使用して何かを起すためにはスライダーに対応するメソッドを実装する必要があります。
サンプルで使用されているObjectSpinnerではMicrosoft.MixedReality.Toolkit.UXのネームスペースを使用してSpinObjectWithSlider(SliderEventData args)のメソッドを定義しています。
using Microsoft.MixedReality.Toolkit.UX; public void SpinObjectWithSlider(SliderEventData args) { // If this is our first slider event, let's record the initial values. if (initialSliderValue < 0) { initialRotation = transform.localRotation; initialScale = transform.localScale; initialSliderValue = args.NewValue; } // Adjust the gem based on the difference between the current slider's value and where it started. float sliderDelta = args.NewValue - initialSliderValue; transform.localRotation = initialRotation * Quaternion.AngleAxis(sliderDelta * -90, Vector3.up); transform.localScale = initialScale * (1 + sliderDelta * 0.2f); }
このメソッドではargsでスライダーの値0~1を受け取っています。
この値を使用してスライダーの値に応じて回転を行うようにしています。
自身のクラスでスライダーの機能を実装するためには以下のように記述します。
public void メソッド名(SliderEventData data) { float x = data,newValue; }
注意すべき点としてスライダーの値は0~1をとります。そのため状況に応じて360をかけたり、マイナスをかけたりなどする必要があります。
本日は以上です。