Interactive 要素 [試験段階]

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

Interactive 要素は unity 2019.3 でサポートされている試験的な機能であり、Unity 2019.3: Serialize リファレンスの新機能を利用しています。

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

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

仮想ハンドによる対話型要素

コア状態

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

現在のコア状態

近距離および遠くの相互作用のコア状態:

相互作用の主要な状態:

遠くの相互作用のコア状態:

その他の主要な状態:

Inspector を使用してコア状態を追加する方法

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

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

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

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

  3. イベント構成 foldout を開いて、状態に関連付けられているイベントとプロパティを表示します。

    イベント構成を使用してインスペクター経由でコア状態を追加する

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

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

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

interactiveElement.AddNewState("SelectFar");

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

状態の内部構造

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

  • 名前: 状態の名前。
  • : 状態の値。 状態が on の場合、状態の値は1です。 状態が off の場合、状態の値は0です。
  • アクティブ: 状態が現在アクティブかどうか。 状態が on の場合、アクティブプロパティの値は true になり、状態が off の場合は false になります。
  • 相互作用の種類: 状態の相互作用の種類は、状態の対象となる操作の種類です。
    • None: は、どの形式の入力操作もサポートしていません。
    • Near: 相互作用のサポート。 入力は、ある手が別のゲームオブジェクトと直接接触しているとき (つまり、その手がワールド空間内のゲームオブジェクトの位置に近い位置) に、相互作用と見なされます。
    • Far: 遠隔操作のサポート。 Game オブジェクトと直接接続する必要がない場合、入力は遠くの対話と見なされます。 たとえば、コントローラーレイや宝石による入力は、遠くの相互作用入力と見なされます。
    • 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");

既定の状態

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

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

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

既定の状態のイベント構成の種類: 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");
});

フォーカス状態

フォーカス状態は、hover に相当する mixed reality と考えることができるほぼすべての対話状態です。 フォーカス状態に対する near と far の相互作用の区別要因は、現在アクティブなポインター型です。 フォーカス状態のポインター型がからかうポインターの場合、相互作用はほぼ対話と見なされます。 プライマリポインターがからかうポインターでない場合、相互作用は遠くの相互作用と見なされます。 フォーカス状態は、既定では対話型要素に存在します。

フォーカス状態の動作 バーチャルハンドによるフォーカス状態

フォーカス状態インスペクター Inpsector でのフォーカス状態

<a name="getting-focus-state-events">フォーカス状態イベントの取得

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

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

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

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

Vs フォーカスの遠くの行動に焦点を当てる

仮想ハンドの対話により、ほぼ遠くに注力

近くの状態にフォーカス

付近の状態は、フォーカスイベントが発生したときに設定され、プライマリポインターはからかうポインターであり、ほぼ対話を示します。

近くの状態の動作  にフォーカス仮想ハンドの対話により、状態の近くにフォーカス

状態インスペクター  の近くにフォーカスインスペクターのコンポーネント付近にフォーカスを移動する

<a name="getting-focusnear-state-events">FocusNear 状態イベントの取得

FocusNear 状態のイベント構成の種類: FocusEvents

FocusEvents focusNearEvents = interactiveElement.GetStateEvents<FocusEvents>(&quot;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 (宝石、ジェスチャ、音声) ポインターは、遠くの相互作用ポインターと見なされます。

遠くの状態の動作  を重視する仮想ハンドの相互作用によりフォーカス状態

遠くのステートインスペクター  にフォーカスインスペクター内の遠くのコンポーネントにフォーカス

<a name="getting-focus-far-state-events">遠くの状態イベントを取得する

FocusFar 状態のイベント構成の種類: FocusEvents

FocusEvents focusFarEvents = interactiveElement.GetStateEvents<FocusEvents>(&quot;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");
});

タッチ状態

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

タッチ状態の動作 仮想ハンドの操作によるタッチ状態

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

<a name="getting-touch-state-events">タッチ状態イベントの取得

Touch 状態のイベント構成の種類: TouchEvents

TouchEvents touchEvents = interactiveElement.GetStateEvents<TouchEvents>(&quot;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 に設定します。

[遠い状態の動作] を選択する 仮想ハンドの操作で遠くを選択する

[遠い状態インスペクター] を選択する インスペクターで遠くのコンポーネントを選択する

<a name="getting-select-far-state-events">遠い状態イベントの選択の取得

SelectFar State のイベント構成の種類: SelectFarEvents

SelectFarEvents selectFarEvents = interactiveElement.GetStateEvents<SelectFarEvents>(&quot;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");
});

クリックされた状態

クリックされた状態は、既定では遠い操作クリック (遠い状態の選択) によってトリガーされます。 この状態は内部的に on に切り替え、OnClicked イベントを呼び出した後、すぐにオフに切り替えます。

注意

状態アクティビティに基づくインスペクターの視覚的フィードバックは、クリックされた状態には存在しない。これは、オンとオフがすぐに切り替わるためです。

クリックされた状態の動作 クリックされた状態と仮想ハンドの相互作用

クリックされた状態インスペクター インスペクターで状態コンポーネントをクリックする

近いクリック状態と遠くクリックされた状態の例
クリックされた状態は、 メソッドを使用して追加のエントリ ポイントを通じてトリガー interactiveElement.TriggerClickedState() できます。 たとえば、ユーザーがオブジェクトのクリックをトリガーするために近い対話式操作を必要とすると、そのメソッドがタッチ状態のリスナーとして TriggerClickedState() 追加されます。

仮想ハンドの相互作用を使用した近くおよび遠くの状態

<a name="getting-clicked-state-events">クリックされた状態イベントの取得

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

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

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

[オンとオフの切り替え] 状態の切り替え

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

ToggleOn とトグルオフ状態の動作 仮想ハンド操作を使用してオンとオフを切り替える

ToggleOn と Toggle Off State Inspector インスペクターのコンポーネントの切り替え

近近および遠方の切り替え状態の例
Clicked 状態と同様に、トグル状態設定では、 メソッドを使用して複数のエントリ ポイントを設定 interactiveElement.SetToggleStates() できます。 たとえば、ユーザーが切り替え状態を設定する追加のエントリ ポイントとしてタッチする場合は、Touch 状態のイベントの 1 つに メソッド SetToggleStates() を追加します。

仮想ハンド操作を使用した近近と遠の切り替え

<a name="getting-toggle-on-and-toggle-off-state-events">状態イベントのオン/オフの切り替え

ToggleOn 状態のイベント構成の種類: ToggleOnEvents
ToggleOff 状態のイベント構成の種類: ToggleOffEvents

// Toggle On Events
ToggleOnEvents toggleOnEvent = interactiveElement.GetStateEvents<ToggleOnEvents>(&quot;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");
});

Speech キーワードの状態

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

Speech キーワードの状態の動作 仮想対話を使用した音声キーワード

Speech キーワードの状態インスペクター インスペクターの Speech キーワード コンポーネント

注意

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

Speech コマンド/キーワードを登録する方法

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

  2. [現在 のプロファイルのコピーとカスタマイズ ] を選択します

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

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

    MRTK ゲーム オブジェクトの Speech キーワード プロファイル

  5. [新しい音声コマンドの追加] を選択します

    MRTK プロファイルに新しい speech キーワードを追加する

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

    MRTK プロファイルでの speech キーワードの構成

  7. Interactive Element Speech Keyword 状態インスペクターに戻り、[キーワードの追加] を選択します

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

    キーワードの検証と登録

  8. Speech プロファイルに登録された新しいキーワードを入力します

    新しい音声キーワードの入力

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

<a name="getting-speech-keyword-state-events">Speech キーワード状態イベントの取得

SpeechKeyword 状態のイベント構成の種類: SpeechKeywordEvents

SpeechKeywordEvents speechKeywordEvents = interactiveElement.GetStateEvents<SpeechKeywordEvents>(&quot;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. Interactive 要素の インスペクターで [カスタム状態 の作成] に移動します。

    カスタム状態の作成

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

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

  3. [ 状態名の設定] を 選択して、状態リストに追加します。

    状態一覧にカスタム状態を追加する

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

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

<a name="how-to-create-a-custom-state-via-script">スクリプトを使用してカスタム状態を作成する方法

interactiveElement.AddNewState(&quot;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. 状態名を考えてみる。 この名前は一意である必要があります。また、既存のコア状態と同じ名前にすることはできません。 この例では、状態名はキーボード になります。

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

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

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

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

    対話型要素で認識されるカスタム状態を対話型要素に追加し  ています

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

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

シーンの例

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

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

Compressable ボタン

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

状態ビジュアライザー [実験的]

状態ビジュアライザーコンポーネントは、リンクされた対話型要素コンポーネントで定義された状態に基づいて、オブジェクトにアニメーションを追加します。 このコンポーネントは、アニメーション資産を作成して MixedRealityToolkit フォルダーに配置し、System.windows.media.animation.animatable> プロパティをターゲットの game オブジェクトに追加することによって、簡略化されたアニメーションのキーフレーム設定を有効にします。 状態間のアニメーション遷移を有効にするために、アニメーターコントローラー資産が作成され、関連するパラメーターと状態遷移を使用して既定のステートマシンが生成されます。 ステートマシンは、Unity のアニメーターウィンドウで表示できます。

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

現在、状態ビジュアライザーは Unity アニメーションシステムを活用しています。

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

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

また、アニメーションクリップ間の滑らかな切り替えを管理するために、 アニメーターステートマシン が生成されます。 既定では、ステートマシンは 任意の状態 を利用して、対話型要素の任意の状態間の遷移を許可します。

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

Unity のステートマシン

ランタイムの制限事項

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

状態ビジュアライザーの使用方法

  1. キューブを作成する

  2. Interactive 要素のアタッチ

  3. 状態ビジュアライザーのアタッチ

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

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

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

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

    状態ビジュアライザーターゲットを追加しています

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

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

  7. Cube System.windows.media.animation.animatable> Properties foldout を開きます。

  8. System.windows.media.animation.animatable> プロパティのドロップダウンメニューを選択し、[] を選択します。

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

  9. [ Color System.windows.media.animation.animatable> プロパティの追加] を選択します。

    ビジュアライザーの color system.windows.media.animation.animatable> プロパティの選択

  10. 色の選択

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

  11. [再生] をクリックして、移行の色の変化を確認します

    バーチャルハンド操作を使用した移行の色の変更例

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

System.windows.media.animation.animatable> プロパティの主な目的は、アニメーションクリップのキーフレーム設定を簡略化することです。 unity アニメーションシステムに慣れていて、生成されたアニメーションクリップにキーフレームを直接設定する場合は、system.windows.media.animation.animatable> プロパティをターゲットオブジェクトに追加して、Unity のアニメーションウィンドウ (Windows > アニメーション > アニメーション) でクリップを開くだけで済みます。

アニメーションの System.windows.media.animation.animatable> プロパティを使用する場合、曲線の種類は EaseInOut に設定されます。

現在の System.windows.media.animation.animatable> のプロパティ:

スケールオフセット

Scale Offset System.windows.media.animation.animatable> プロパティは、オブジェクトの現在のスケールを取得し、定義されたオフセットを追加します。

仮想ハンド操作によるスケールオフセット

位置のオフセット

位置オフセット System.windows.media.animation.animatable> プロパティは、オブジェクトの現在位置を取得し、定義されたオフセットを追加します。

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

Color

Color System.windows.media.animation.animatable> プロパティは、素材にメインカラープロパティがある場合に、素材のメイン色を表します。 このプロパティは、プロパティをアニメーション化 material._Color します。

バーチャルハンド操作によるフォーカスの色の変更

シェーダーの色

Shader Color System.windows.media.animation.animatable> プロパティは、color 型の shader プロパティを参照します。 すべてのシェーダープロパティにはプロパティ名が必要です。 次の gif は、主要な素材色ではない Fill_Color という名前のシェーダー色プロパティをアニメーション化する方法を示しています。 マテリアルインスペクターで値が変化していることを確認します。

バーチャル操作による色の網掛け

シェーダー Float

Shader Float System.windows.media.animation.animatable> プロパティは、float 型の shader プロパティを参照します。 すべてのシェーダープロパティにはプロパティ名が必要です。 次の gif では、メタリックプロパティのマテリアルインスペクターで値を変更していることを確認します。

仮想ハンド操作によるシェーダー float

シェーダーベクター

シェーダーベクター System.windows.media.animation.animatable> プロパティは、Vector4 型のシェーダープロパティを参照します。 すべてのシェーダープロパティにはプロパティ名が必要です。 下の gif では、[タイル (メイン Tex_ST)] プロパティの [マテリアルインスペクター] で値が変化していることを確認します。

仮想ハンド操作によるシェーダーベクター

System.windows.media.animation.animatable> Shader プロパティ名を検索する方法

  1. ウィンドウに移動 > アニメーション > アニメーション

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

  3. アニメーションウィンドウで任意のアニメーションクリップを選択する

  4. [ プロパティの追加] を選択し、メッシュレンダラー foldout を開きます。

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

  5. この一覧には、すべての System.windows.media.animation.animatable> プロパティ名の名前が含まれています

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

こちらもご覧ください