対話型要素 [試験段階]

MRTK 入力システムへの一元化された単純なエントリ ポイント。 コア対話状態の状態管理メソッド、イベント管理、および状態設定ロジックが含まれています。

対話型要素は、Unity 2019.3 以上でサポートされている試験的な機能であり、Unity 2019.3 から導入されたシリアル化リファレンス機能を利用しています。

対話型要素インスペクター

再生モード中、対話型要素インスペクターは、現在の状態がアクティブであるかどうかを示す視覚的なフィードバックを提供します。 アクティブな状態の場合は、シアン色で強調表示されます。 状態がアクティブでない場合、色は変化しません。 インスペクターの状態の横にある数値は、状態の値です。状態がアクティブの場合、値は 1 になります。状態がアクティブでない場合、値は 0 になります。

Interactive Element with virtual hand interaction

コア状態

対話型要素にはコア状態が含まれており、カスタム状態の追加がサポートされています。 コア状態とは、BaseInteractiveElement で定義された状態設定ロジックが既に含まれている状態です。 現在の入力主導のコア状態の一覧を次に示します。

現在のコア状態

近接対話と遠隔対話のコア状態:

近接対話のコア状態:

遠隔対話のコア状態:

その他のコア状態:

インスペクターを使用してコア状態を追加する方法

  1. 対話型要素のインスペクターで、[Add Core State] (コア状態の追加) に移動します。

    Add a Core State via Inspector

  2. [Select State] (状態の選択) ボタンを選択して、追加するコア状態を選択します。 メニュー内の状態は、対話の種類によって並べ替えられます。

    Add a Core State via Inspector with state selected

  3. [Event Configuration] (イベント構成) フォールドアウトを開いて、状態に関連付けられたイベントとプロパティを表示します。

    Add a Core State via Inspector with event configuration

スクリプトを使用してコア状態を追加する方法

AddNewState(stateName) メソッドを使用して、コア状態を追加します。 使用可能なコア状態の名前の一覧を表示するには、CoreInteractionState 列挙型を使用します。

// Add by name or add by CoreInteractionState enum to string

interactiveElement.AddNewState("SelectFar");

interactiveElement.AddNewState(CoreInteractionState.SelectFar.ToString());

状態の内部構造

対話型要素内の状態の種類は、InteractionState です。 InteractionState には、次のプロパティが含まれています。

  • 名前: 状態の名前。
  • : 状態の値。 状態がオンの場合、状態の値は 1 です。 状態がオフの場合、状態の値は 0 です。
  • アクティブ: 状態が現在アクティブかどうか。 状態がオンの場合、アクティブ プロパティの値は true になり、状態がオフの場合は false になります。
  • 対話の種類: 状態の対話の種類は、状態の対象となる対話の種類です。
    • None: どの形式の入力対話もサポートしていません。
    • Near: 近接対話のサポート。 多関節ハンドが別のゲーム オブジェクトと直接接触している (つまり、多関節ハンドの位置がワールド空間内のゲーム オブジェクトの位置に近い) 場合、入力は近接対話と見なされます。
    • Far: 遠隔対話のサポート。 ゲーム オブジェクトと直接接触する必要がない場合、入力は遠隔対話と見なされます。 たとえば、コントローラー レイや視線による入力は、遠隔対話入力と見なされます。
    • NearAndFar: 近接対話と遠隔対話の両方のサポートを含みます。
    • Other: ポインターに依存しない対話のサポート。
  • イベント構成: 状態のイベント構成は、シリアル化されたイベント プロファイルのエントリ ポイントです。

これらのプロパティはすべて、対話型要素に含まれている State Manager で内部的に設定されます。 状態を変更するには、次のヘルパー メソッドを使用します。

状態設定ヘルパー メソッド

// Get the InteractionState
interactiveElement.GetState("StateName");

// Set a state value to 1/on
interactiveElement.SetStateOn("StateName");

// Set a state value to 0/off
interactiveElement.SetStateOff("StateName");

// Check if a state is present in the state list
interactiveElement.IsStatePresent("StateName");

// Check whether or not a state is active
interactiveElement.IsStateActive("StateName");

// Add a new state to the state list
interactiveElement.AddNewState("StateName");

// Remove a state from the state list
interactiveElement.RemoveState("StateName");

状態のイベント構成の取得は、状態自体に固有です。 各コア状態には特定の種類のイベント構成が含まれます。これは、各コア状態について説明する以下のセクションに記載されています。

状態のイベント構成の取得の一般的な例を次に示します。

// T varies depending on the core state - the specific T's are specified under each of the core state sections
T stateNameEvents = interactiveElement.GetStateEvents<T>("StateName");

既定の状態

既定の状態は、対話型要素に常に存在します。 この状態は、他のすべての状態がアクティブでない場合にのみアクティブになります。 その他の状態がアクティブになると、既定の状態は内部的にオフに設定されます。

対話型要素は、状態の一覧に存在する既定の状態とフォーカス状態で初期化されます。 既定の状態は、状態の一覧に常に存在する必要があります。

既定の状態イベントの取得

既定の状態のイベント構成の種類: StateEvents

StateEvents defaultEvents = interactiveElement.GetStateEvents<StateEvents>("Default");

defaultEvents.OnStateOn.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Default State On");
});

defaultEvents.OnStateOff.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Default State Off");
});

フォーカス状態

フォーカス状態は、ホバーに相当する複合現実と考えることができる、近接対話状態と遠隔対話状態です。 フォーカス状態に対する近接対話と遠隔対話を区別する要因は、現在アクティブなポインターの種類です。 フォーカス状態のポインターの種類が指差しポインターの場合、対話は近接対話と見なされます。 プライマリ ポインターが指差しポインターでない場合、対話は遠隔対話と見なされます。 フォーカス状態は、既定で対話型要素に存在します。

フォーカス状態の動作Focus state with virtual hand interaction

フォーカス状態インスペクターFocus state in the Inpsector

フォーカス状態イベントの取得

フォーカス状態のイベント構成の種類: FocusEvents

FocusEvents focusEvents = interactiveElement.GetStateEvents<FocusEvents>("Focus");

focusEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Focus On");
});

focusEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Focus Off");
});

近接フォーカスと遠隔フォーカスの動作

Focus near and far with virtual hand interaction

近接フォーカス状態

近接フォーカス状態は、フォーカス イベントが発生し、プライマリ ポインターが指差しポインター (近接対話を示す) である場合に設定されます。

近接フォーカス状態の動作Focus near state with virtual hand interaction

近接フォーカス状態インスペクターFocus near component in the Inspector

近接フォーカス状態イベントの取得

近接フォーカス状態のイベント構成の種類: FocusEvents

FocusEvents focusNearEvents = interactiveElement.GetStateEvents<FocusEvents>("FocusNear");

focusNearEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Near Interaction Focus On");
});

focusNearEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Near Interaction Focus Off");
});

遠隔フォーカス状態

遠隔フォーカス状態は、プライマリ ポインターが指差しポインターでない場合に設定されます。 たとえば、既定のコントローラー レイ ポインターと GGV (視線、ジェスチャ、音声) ポインターは、遠隔対話ポインターと見なされます。

遠隔フォーカス状態の動作Focus state far with virtual hand interaction

遠隔フォーカス状態インスペクターFocus far component in the Inspector

遠隔フォーカス状態イベントの取得

遠隔フォーカス状態のイベント構成の種類: FocusEvents

FocusEvents focusFarEvents = interactiveElement.GetStateEvents<FocusEvents>("FocusFar");

focusFarEvents.OnFocusOn.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Focus On");
});

focusFarEvents.OnFocusOff.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Focus Off");
});

タッチ状態

タッチ状態は、多関節ハンドがオブジェクトに直接接触したときに設定される近接対話状態です。 直接的なタッチとは、多関節ハンドの人差し指がオブジェクトのワールド位置に非常に近いことを意味します。 既定では、状態の一覧にタッチ状態が追加されると、NearInteractionTouchableVolume コンポーネントがオブジェクトにアタッチされます。 タッチイベントを検出するには、NearInteractionTouchableVolume コンポーネントまたは NearInteractionTouchable コンポーネントが存在している必要があります。 NearInteractionTouchableVolumeNearInteractionTouchable の違いは、NearInteractionTouchableVolume ではオブジェクトのコライダーに基づいてタッチが検出され、NearInteractionTouchable では平面の定義済み領域内のタッチが検出されるという点です。

タッチ状態の動作Touch state with virtual hand interaction

タッチ状態インスペクターTouch state component in the Inspector

タッチ状態イベントの取得

タッチ状態のイベント構成の種類: TouchEvents

TouchEvents touchEvents = interactiveElement.GetStateEvents<TouchEvents>("Touch");

touchEvents.OnTouchStarted.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Started");
});

touchEvents.OnTouchCompleted.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Completed");
});

touchEvents.OnTouchUpdated.AddListener((touchData) =>
{
    Debug.Log($"{gameObject.name} Touch Updated");
});

遠隔選択状態

遠隔選択状態は、表示される IMixedRealityPointerHandler です。 この状態は、遠隔対話クリック (エアタップ) を検出し、遠隔対話ポインター (既定のコントローラー レイ ポインターや GGV ポインターなど) を使用して保持する、遠隔対話状態です。 遠隔選択状態には、イベント構成フォールドアウトの下に、Global という名前のオプションがあります。 Global が true の場合、IMixedRealityPointerHandler はグローバル入力ハンドラーとして登録されます。 ハンドラーがグローバルとして登録されている場合、入力システム イベントをトリガーするのにオブジェクトにフォーカスする必要はありません。 たとえば、フォーカスされているオブジェクトに関係なく、エアタップまたは選択ジェスチャが実行されるたびにユーザーが認識したい場合は、Global を true に設定します。

遠隔選択状態の動作Select far with virtual hand interaction

遠隔選択状態インスペクターSelect far component in the Inspector

遠隔選択状態イベントの取得

遠隔選択状態のイベント構成の種類: SelectFarEvents

SelectFarEvents selectFarEvents = interactiveElement.GetStateEvents<SelectFarEvents>("SelectFar");

selectFarEvents.OnSelectUp.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Up");
});

selectFarEvents.OnSelectDown.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Down");
});

selectFarEvents.OnSelectHold.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Hold");
});

selectFarEvents.OnSelectClicked.AddListener((pointerEventData) =>
{
    Debug.Log($"{gameObject.name} Far Interaction Pointer Clicked");
});

クリック状態

クリック状態は、既定で、遠隔対話クリック (遠隔選択状態) によってトリガーされます。 この状態は内部でオンに切り替わり、OnClicked イベントを呼び出してから、すぐにオフに切り替わります。

Note

状態アクティビティに基づくインスペクターでの視覚的なフィードバックは、クリック状態に対しては表示されません。これは、オンに切り替わってからすぐにオフに切り替わるためです。

クリック状態の動作Clicked state with virtual hand interactions

クリック状態インスペクターClick state component in the Inspector

近接クリック状態と遠隔クリック状態の例
クリック状態は、interactiveElement.TriggerClickedState() メソッドを使用して、追加のエントリ ポイントを介してトリガーできます。 たとえば、ユーザーがオブジェクトのクリックをトリガーするのに近接対話タッチも使用する場合、タッチ状態のリスナーとして TriggerClickedState() メソッドを追加します。

Near and far state with virtual hand interactions

クリック状態イベントの取得

クリック状態のイベント構成の種類: ClickedEvents

ClickedEvents clickedEvent = interactiveElement.GetStateEvents<ClickedEvents>("Clicked");

clickedEvent.OnClicked.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Clicked");
});

トグル オン状態とトグル オフ状態

トグル オン状態とトグル オフ状態はペアであり、トグル動作には両方が存在する必要があります。 既定でトグル オン状態とトグル オフ状態は、遠隔対話クリック (遠隔選択状態) によってトリガーされます。 開始時には、トグル オフ状態がアクティブになります。つまり、トグルがオフに初期化されます。 ユーザーが開始時にトグル オン状態をアクティブにする場合は、トグル オン状態で IsSelectedOnStart を true に設定します。

トグル オン状態とトグル オフ状態の動作Toggle on and off with virtual hand interactions

トグル オン状態およびトグル オフ状態インスペクターToggle component in the Inspector

近接トグル状態と遠隔トグル状態の例
クリック状態と同様に、トグル状態の設定には、interactiveElement.SetToggleStates() メソッドを使用して複数のエントリ ポイントを含めることができます。 たとえば、ユーザーがトグル状態を設定するための追加のエントリ ポイントとしてタッチを使用する場合、タッチ状態のいずれかのイベントに SetToggleStates() メソッドを追加します。

Near and far toggle with virtual hand interactions

トグル オン状態イベントとトグル オフ状態イベントの取得

トグル オン状態のイベント構成の種類: ToggleOnEvents
トグル オフ状態のイベント構成の種類: ToggleOffEvents

// Toggle On Events
ToggleOnEvents toggleOnEvent = interactiveElement.GetStateEvents<ToggleOnEvents>("ToggleOn");

toggleOnEvent.OnToggleOn.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Toggled On");
});

// Toggle Off Events
ToggleOffEvents toggleOffEvent = interactiveElement.GetStateEvents<ToggleOffEvents>("ToggleOff");

toggleOffEvent.OnToggleOff.AddListener(() =>
{
    Debug.Log($"{gameObject.name} Toggled Off");
});

音声キーワード状態

音声キーワード状態は、Mixed Reality 音声プロファイルで定義されているキーワードをリッスンします。 新しいキーワードは、ランタイムの前に音声コマンド プロファイルに登録する必要があります (下の手順を参照)。

音声キーワード状態の動作Speech keyword with virtual interaction

音声キーワード状態インスペクターSpeech keyword component in the Inspector

Note

上の gif で F5 キーを押して、エディターで音声キーワード状態がトリガーされました。 エディターでの音声テストの設定については、以下の手順で説明します。

音声コマンドまたはキーワードを登録する方法

  1. MixedRealityToolkit ゲーム オブジェクトを選択します。

  2. 現在のプロファイルをコピーしてカスタマイズします。

  3. 入力セクションに移動し、[Clone] (複製) を選択して、入力プロファイルの変更を有効にします。

  4. 入力プロファイルの [Speech] (音声) セクションまで下にスクロールし、音声プロファイルを複製します。

    Speech keyword profile in the MRTK game object

  5. [Add a New Speech Command] (新しい音声コマンドの追加) を選択します。

    Adding a new speech keyword in the MRTK profile

  6. 新しいキーワードを入力します。 省略可能: キーコードを F5 (または別のキーコード) に変更して、エディターでテストできるようにします。

    Configuring speech keyword in the MRTK profile

  7. 対話型要素音声キーワード状態インスペクターに戻り、[キーワードの追加] を選択します。

    Adding keyword to interactive element component

    Keyword validation and registration

  8. さきほど音声プロファイルに登録した新しいキーワードを入力します。

    Entering new speech keyword

エディターで音声キーワード状態をテストするには、手順 6 で定義したキーコード (F5) を押して、音声キーワードで認識されるイベントをシミュレートします。

音声キーワード状態イベントの取得

音声キーワード状態のイベント構成の種類: SpeechKeywordEvents

SpeechKeywordEvents speechKeywordEvents = interactiveElement.GetStateEvents<SpeechKeywordEvents>("SpeechKeyword");

speechKeywordEvents.OnAnySpeechKeywordRecognized.AddListener((speechEventData) =>
{
    Debug.Log($"{speechEventData.Command.Keyword} recognized");
});

// Get the "Change" Keyword event specifically
KeywordEvent keywordEvent = speechKeywordEvents.Keywords.Find((keyword) => keyword.Keyword == "Change");

keywordEvent.OnKeywordRecognized.AddListener(() =>
{ 
    Debug.Log("Change Keyword Recognized"); 
});

カスタム状態

インスペクターを使用してカスタム状態を作成する方法

インスペクターを使用して作成されたカスタム状態は、既定の状態イベント構成を使用して初期化されます。 カスタム状態の既定のイベント構成の種類は StateEvents で、OnStateOn イベントと OnStateOff イベントが含まれています。

  1. 対話型要素のインスペクターで、[Create Custom State] (カスタム状態の作成) に移動します。

    Creating a custom state

  2. 新しい状態の名前を入力します。 この名前は一意である必要があり、既存のコア状態と同じにすることはできません。

    Entering the name of a new custom state

  3. 状態の一覧に追加するには、[Set State Name] (状態名の設定) を選択します。

    Add custom state to state list

    このカスタム状態は、OnStateOn イベントと OnStateOff イベントを含む既定の StateEvents イベント構成を使用して初期化されます。 新しい状態のカスタム イベント構成を作成するには、「カスタム イベント構成を使用したカスタム状態の作成」を参照してください。

    New state shown in the interactive element component

スクリプトを使用してカスタム状態を作成する方法

interactiveElement.AddNewState("MyNewState");

// A new state by default is initialized with a the default StateEvents configuration which contains the 
// OnStateOn and OnStateOff events

StateEvents myNewStateEvents = interactiveElement.GetStateEvents<StateEvents>("MyNewState");

myNewStateEvents.OnStateOn.AddListener(() =>
{
    Debug.Log($"MyNewState is On");
});

カスタム イベント構成を使用したカスタム状態の作成

Keyboard という名前のカスタム状態のファイルの例を次に示します。MRTK\SDK\Experimental\InteractiveElement\Examples\Scripts\CustomStateExample

次の手順では、カスタム状態のイベント構成ファイルとイベント レシーバー ファイルを作成する既存の例を見ていきます。

  1. 状態名を考えます。 この名前は一意である必要があり、既存のコア状態と同じにすることはできません。 この例では、状態名は Keyboard になります。

  2. 状態名 + "Receiver" と状態名 + "Events" という名前の 2 つの .cs ファイルを作成します。 これらのファイルの名前付けは、内部的に考慮され、状態名 + Event/Receiver の規則に従う必要があります。

    Keyboard state scripts

  3. ファイルの内容の詳細については、KeyboardEvents.cs ファイルと KeyboardReceiver.cs ファイルを参照してください。 新しいイベント構成クラスは BaseInteractionEventConfiguration から継承する必要があり、新しいイベント レシーバー クラスは BaseEventReceiver から継承する必要があります。 キーボードの状態の状態設定の例は、CustomStateSettingExample.cs ファイル内にあります。

  4. 状態名を使用して、対話型要素に状態を追加します。イベント構成ファイルとイベント レシーバー ファイルが存在する場合、状態名が認識されます。 インスペクターに、カスタム イベント構成ファイルのプロパティが表示されます。

    Adding custom state to interactive elementCustom state recognized in the interactive element

  5. イベント構成ファイルとイベント レシーバー ファイルのその他の例については、次のパスにあるファイルを参照してください。

  • MRTK\SDK\Experimental\InteractiveElement\InteractiveElement\Events\EventConfigurations
  • MRTK\SDK\Experimental\InteractiveElement\InteractiveElement\Events\EventReceivers

シーンの例

対話型要素 + 状態ビジュアライザーのシーンの例は、MRTK\SDK\Experimental\InteractiveElement\Examples\InteractiveElementExampleScene.unity にあります。

Example scene with Interactive Element and State Visualizer

押しボタン

このシーンの例には、CompressableButtonCompressableButtonToggle という名前のプレハブが含まれています。これらのプレハブは、対話型要素と状態ビジュアライザーを使用して構築された PressableButtonHoloLens2 ボタンの動作をミラー化します。 CompressableButton コンポーネントは現在、PressableButton + PressableButtonHoloLens2BaseInteractiveElement (基底クラス) の組み合わせです。

状態ビジュアライザー [試験段階]

状態ビジュアライザー コンポーネントでは、リンクされた対話型要素コンポーネントで定義されている状態に基づいて、オブジェクトにアニメーションを追加します。 このコンポーネントによって、アニメーション資産が作成され、MixedRealityToolkit.Generated フォルダーに格納されます。また、ターゲット ゲーム オブジェクトにアニメーション化可能プロパティを追加することで、簡略化されたアニメーション キーフレーム設定が可能になります。 アニメーションの状態の遷移を有効にするために、アニメーター コントローラー資産が作成され、関連付けられているパラメーターと状態の遷移を使用して既定の状態機械が生成されます。 状態機械は、Unity の [Animator] (アニメーター) ウィンドウに表示できます。

状態ビジュアライザーと Unity アニメーション システム

状態ビジュアライザーでは現在、Unity アニメーション システムが利用されています。

状態ビジュアライザーの [Generate New Animation Clips] (新しいアニメーション クリップの生成) ボタンが押されると、対話型要素の状態名に基づいて新しいアニメーション クリップ資産が生成され、MixedRealityToolkit.Generated フォルダーに配置されます。 各状態コンテナーのアニメーション クリップ プロパティは、関連付けられたアニメーション クリップに設定されます。

Animation clips in state visualizer component

また、アニメーション クリップ間のスムーズな遷移を管理するために、アニメーター状態機械が生成されます。 既定では、状態機械によって Any State を利用して、対話型要素の任意の状態の遷移が可能になります。

状態ごとに、アニメーターでトリガーされた状態ビジュアライザーも生成されます。状態ビジュアライザーでトリガー パラメーターを使用して、アニメーションがトリガーされます。

Unity state machine

ランタイムの制限事項

状態ビジュアライザーは、インスペクターを使用してオブジェクトに追加する必要があります。スクリプトを使用して追加することはできません。 AnimatorStateMachine または AnimationController を変更するプロパティは、アプリのビルド時に削除されるエディターの名前空間 (UnityEditor.Animations) に含まれています。

状態ビジュアライザーを使用する方法

  1. キューブを作成します。

  2. 対話型要素をアタッチします。

  3. 状態ビジュアライザーをアタッチします。

  4. [Generate New Animation Clips] (新しいアニメーション クリップの生成) を選択します。

    Generating new animation clips

    Showing generated animation clips in visualizer and interactive element components

  5. フォーカス状態コンテナーで、[Add Target] (ターゲットの追加) を選択します。

    Adding state visualizer target

  6. 現在のゲーム オブジェクトをターゲット フィールドにドラッグします。

    Setting state visualizer target

  7. [Cube Animatable Properties] (キューブのアニメーション化可能プロパティ) フォールドアウトを開きます。

  8. アニメーション化可能プロパティのドロップダウン メニューを選択し、[Color] (色) を選択します。

    Setting state visualizer color

  9. [Add the Color Animatable Property] (色のアニメーション化可能プロパティの追加) を選択します。

    Selecting the visualizer color animatable property

  10. 色を選択します。

    Choosing a visualizer color from color wheel

  11. 再生を押し、遷移色の変化を観察します。

    Transitional color change example with virtual hand interaction

アニメーション化が可能なプロパティ

アニメーション化可能プロパティの主な目的は、アニメーション クリップのキーフレーム設定を簡略化することです。 ユーザーが Unity アニメーション システムに精通していて、生成されたアニメーション クリップにキーフレームを直接設定する場合は、ターゲット オブジェクトにアニメーション化可能プロパティを追加することはできず、Unity の [Animation] (アニメーション) ウィンドウ (Windows > [Animation] (アニメーション) > [Animation] (アニメーション)) でクリップを開きます。

アニメーションにアニメーション化可能プロパティを使用する場合、曲線の種類は EaseInOut に設定されます。

現在のアニメーション化可能プロパティ:

スケール オフセット

スケール オフセットのアニメーション化可能プロパティでは、オブジェクトの現在のスケールを取得し、定義されたオフセットを追加します。

Scale offset with virtual hand interaction

位置オフセット

位置オフセットのアニメーション化可能プロパティでは、オブジェクトの現在位置を取得し、定義されたオフセットを追加します。

Position offset with virtual hand interaction

Color

色のアニメーション化可能プロパティは、素材にメインの色プロパティがある場合、素材のメインの色を表します。 このプロパティでは、material._Color プロパティをアニメーション化します。

Focus color change with virtual hand interaction

シェーダーの色

シェーダーの色のアニメーション化可能プロパティは、color 型のシェーダー プロパティを参照します。 すべてのシェーダー プロパティには、プロパティ名が必要です。 次の gif は、素材のメインの色ではない、Fill_Color という名前のシェーダーの色プロパティをアニメーション化する方法を示しています。 素材インスペクターで変化する値を観察します。

Shade color with virtual hand interaction

シェーダー フロート

シェーダー フロート アニメーション化可能プロパティは、float 型のシェーダー プロパティを参照します。 すべてのシェーダー プロパティには、プロパティ名が必要です。 次の gif で、素材インスペクターでの Metallic プロパティの値の変化を観察します。

Shader float with virtual hand interaction

シェーダー ベクター

シェーダー ベクターのアニメーション化可能プロパティは、Vector4 型のシェーダー プロパティを参照します。 すべてのシェーダー プロパティには、プロパティ名が必要です。 次の gif で、素材インスペクターでの Tiling (Main Tex_ST) プロパティの値の変化を観察します。

Shader vector with virtual hand interaction

アニメーション化可能シェーダー プロパティの名前を検索する方法

  1. Windows > [Animation] (アニメーション) > [Animation] (アニメーション) に移動します。

  2. 階層で状態ビジュアライザーを含むオブジェクトが選択されていることを確認します。

  3. [Animation] (アニメーション) ウィンドウで、任意のアニメーション クリップを選択します。

  4. [Add Property] (プロパティの追加) を選択し、[Mesh Renderer] (メッシュ レンダラー) フォールドアウトを開きます。

    Adding animation property in the Animator window

  5. この一覧には、すべてのアニメーション化可能プロパティの名前が含まれています。

    Mesh renderer animation properties in the Animator window

関連項目