Interactive 要素 [Experimental] — MRTK2

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

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

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

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

仮想ハンド操作を使用した Interactive 要素

コア状態

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

現在のコア状態

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

近接対話のコア状態:

遠隔対話のコア状態:

その他のコア状態:

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

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

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

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

    状態が選択された [インスペクター] を使用してコア状態を追加する

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

    イベント構成を使用して Inspector を使用してコア状態を追加する

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

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");
});

フォーカス状態

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

フォーカス状態動作仮想ハンド操作を使用したフォーカス状態

フォーカス状態インスペクター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");
});

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

仮想ハンド インタラクションを使用して近く、遠くにフォーカスする

近接フォーカス状態

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

フォーカス近くの状態動作仮想ハンド操作を使用した近くの状態へのフォーカス

[状態に近いインスペクターにフォーカス] インスペクターの [近くにフォーカス] コンポーネント

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

近接フォーカス状態のイベント構成の種類: 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 (視線、ジェスチャ、音声) ポインターは、遠隔対話ポインターと見なされます。

フォーカス 遠くの状態 動作仮想ハンド操作を使用して遠くにフォーカス状態をフォーカスする

[遠い状態にフォーカスする] インスペクターの[遠く] コンポーネントをフォーカスする

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

遠隔フォーカス状態のイベント構成の種類: 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 では平面の定義済み領域内のタッチが検出されるという点です。

タッチ状態動作仮想ハンド操作を使用したタッチ状態

タッチ状態インスペクター インスペクターのタッチ状態コンポーネント

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

タッチ状態のイベント構成の種類: 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 に設定します。

[Far State Behavior]\(遠い状態の動作\) を選択します。仮想ハンド操作を使用して遠くを選択します

[Far State 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

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

クリックされた状態の動作仮想ハンド操作を使用してクリックされた状態

[状態インスペクターのクリック] インスペクターの状態コンポーネントをクリックする

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

仮想ハンド操作を使用した近距離と遠方の状態

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

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

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

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

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

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

ToggleOn と Toggle Off State Behavior (状態動作切り替え) 仮想ハンド操作のオンとオフの切り替え

ToggleOn と Toggle Off 状態インスペクターの切り替えインスペクターのトグル コンポーネント

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

仮想ハンド操作による近距離と遠方の切り替え

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

トグル オン状態のイベント構成の種類: 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 State Behavior仮想対話を使用した音声キーワード (keyword)

Speech Keyword State Inspector インスペクターの Speech キーワード (keyword) コンポーネント

Note

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

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

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

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

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

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

    MRTK ゲーム オブジェクトの音声キーワード (keyword)プロファイル

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

    MRTK プロファイルに新しい音声キーワード (keyword)を追加する

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

    MRTK プロファイルでの音声キーワード (keyword)の構成

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

    対話型要素コンポーネントへのキーワード (keyword)の追加

    キーワードの検証と登録

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

    新しい音声キーワード (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] (カスタム状態の作成) に移動します。

    カスタム状態の作成

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

    新しいカスタム状態の名前を入力する

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

    状態リストにカスタム状態を追加する

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

    対話型要素コンポーネントに表示される新しい状態

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

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 の規則に従う必要があります。

    キーボード状態スクリプト

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

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

    対話型要素へのカスタム状態の追加対話型要素で認識されるカスタム状態

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

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

シーンの例

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

対話型要素と状態ビジュアライザーを使用したシーンの例

押しボタン

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

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

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

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

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

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

状態ビジュアライザー コンポーネントのアニメーション クリップ

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

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

Unity ステート マシン

ランタイムの制限事項

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

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

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

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

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

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

    新しいアニメーション クリップの生成

    ビジュアライザーと対話型要素コンポーネントで生成されたアニメーション クリップを表示する

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

    状態ビジュアライザー ターゲットの追加

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

    状態ビジュアライザーターゲットの設定

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

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

    状態ビジュアライザーの色の設定

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

    ビジュアライザーの色のアニメーション化可能なプロパティの選択

  10. 色を選択します。

    カラー ホイールからビジュアライザーの色を選択する

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

    仮想ハンド操作を使用した遷移色の変更の例

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

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

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

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

スケール オフセット

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

仮想ハンド操作を使用してオフセットをスケーリングする

位置オフセット

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

仮想ハンド操作による位置オフセット

Color

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

仮想ハンド操作によるフォーカスの色の変更

シェーダーの色

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

仮想ハンド操作による網掛け色

シェーダー フロート

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

仮想ハンド操作を使用したシェーダー フロート

シェーダー ベクター

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

仮想ハンド操作を使用したシェーダー ベクター

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

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

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

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

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

    [アニメーター] ウィンドウでのアニメーション プロパティの追加

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

    [アニメーター] ウィンドウのメッシュ レンダラーのアニメーション プロパティ

関連項目