ユーザー入力の処理

アプリケーション内の要素がユーザー入力にどのように反応するかを設定できます。Kanzi では、ユーザー入力を処理するために次のことができます。

../../_images/input.gif

これらの Kanzi ノードでは、デフォルトで入力を処理するため、入力マニピュレータを手動で作成する必要はありません。

ユーザー入力に基づいてインタラクションを作成するには、トリガーとアクションを使用します。

トリガーの使用 を参照してください。

入力マニピュレータの使用

Kanzi は、入力への低レベルおよび高レベルのアクセスを提供します。

  • 高レベルシステムでは、クリック、パン、ピンチなどのジェスチャとして入力を扱います。ジェスチャをUIコンポーネントやアプリケーション機能にバインドするために、高レベルシステムを使用することをお勧めします。

  • 低レベル入力システムは、ノードで発生する生のタッチイベントを報告します。

Kanzi は、Kanzi アプリケーション内のノードに対するジェスチャー認識を可能にする入力マニピュレータを提供します。マニピュレータを作成および構成できます。

  • Kanzi Studio で Input Manipulators ノードコンポーネントと入力マニピュレータトリガーを使用する場合

  • Kanzi Engine API を通じて

Kanzi は、次の入力マニピュレータを提供します。

../../_images/click-manipulator.png

Kanzi アプリケーションでユーザーがノードをクリックできるようにするには、Click Manipulator を使用します。

Click Manipulator を使用する を参照してください。

../../_images/long-press-manipulator.png

Kanzi アプリケーションでユーザーがノードを長押しできるようにするには、Long-Press Manipulator を使用します。

Long-Press Manipulator を使用する を参照してください。

../../_images/multi-click-manipulator.png

Kanzi アプリケーションでユーザーがノードをマルチクリックできるようにするには、Multi-Click Manipulator を使用します。

Multi-Click Manipulator を使用する を参照してください。

../../_images/key-manipulator.png

Key Manipulator を使用して、ユーザーがアプリケーションをナビゲートするために使用できるキーを設定します。たとえば、デフォルトのフォーカスナビゲーションキーをオーバーライドして特定のキーでノードにフォーカスを設定したり、キーを設定してポップアップタイプのウィンドウを開閉したり、フォーカスチェーン内でフォーカスを移動したりできます。

Key Manipulator を使用する を参照してください。

../../_images/navigation-manipulator.png

Navigation Manipulator を使用して、ユーザーがアプリケーション内の異なる方向に移動するために使用できるキーを設定します。

Navigation Manipulator を使用する を参照してください。

../../_images/drag-and-drop-manipulator.png

Kanzi アプリケーションでユーザーがノードをドラッグアンドドロップできるようにするには、Drag-And-Drop Manipulator を使用します。

Drag-And-Drop Manipulator を使用する を参照してください。

../../_images/pan-manipulator.png

Kanzi アプリケーションでユーザーがノードを移動できるようにするには、Pan Manipulator を使用します。

Pan Manipulator を使用する を参照してください。

../../_images/pinch-manipulator.png

Pinch Manipulator を使用して、ユーザーが Kanzi アプリケーション内のノードをズームおよび回転できるようにします。

Pinch Manipulator を使用する を参照してください。

Kanzi Studio でノードを選択し、Node Components > Input Manipulators で入力マニピュレータノードコンポーネントを作成すると、Kanzi はそのノードに対応する入力マニピュレータをインストールします。Kanzi Studio は、ジェスチャー認識を有効にするためのこれらの入力マニピュレータコンポーネントを提供します。

  • Click Manipulator

  • Key Manipulator

  • Long-Press Manipulator

  • Multi-Click Manipulator

  • Navigation Manipulator

  • Pan Manipulator

../../_images/input-manipulator-components.png

Kanzi Engine APIでは、InputManipulator は入力マニピュレータの基底クラスであり、ClickManipulator::create や PanManipulator::create のような関数が、対応するジェスチャー認識を担当する入力マニピュレータを作成します。

入力マニピュレータを作成する際に、ジェスチャーを認識するためには、Node::addInputManipulator を持つノードにそれをアタッチします。この機能は、そのノードのすべての子ノードにもアタッチします。

添付された入力マニピュレータは、ユーザーの操作に応じてメッセージを生成します。各マニピュレータは、PanManipulator::StartedMessage、PanManipulator::MovedMessage、PanManipulator::FinishedMessage など、パンマニピュレータのジェスチャー認識中のさまざまなイベントを報告するためにメッセージを使用します。

ノードが入力にどのように反応するかを制御する

Input > Enabled プロパティを使用して、ノードが入力にどのように反応するかを制御します。

ヒント

Button、List Box、Scroll View、Slider、および Text Box ノードは、デフォルトで入力を処理し、無効化されているときは入力に反応しません。

ノードの Enabled プロパティを無効にすると、そのノードとその子孫ノードが同じオーバーレイフォーカススコープ内で実質的に無効になります。

これは、オーバーレイフォーカススコープノードを含むノードの Enabled プロパティを無効にした場合でも、そのオーバーレイ内のノードは実質的に有効なままであることを意味します。

Kanzi は、無効化されたノードにも入力を提供します。これにより、無効化されたノードの動作を制御することができます。

ノードを効果的に無効にする場合:

  • ノードがフォーカスされているとき、そのノードはフォーカスが別のノードに移動するまでキー入力を受け取ります。

  • ノードがフォーカスされていない場合、それはフォーカスチェーンの一部ではなく、キー入力を受け取りません。

ノードが効果的に有効になっているかどうかを確認するには、ステートマネージャーまたはバインディングで Input > Effectively Enabled プロパティを使用します。たとえば、ノードが使用中であるかどうかをユーザーに視覚的に示すために、ステートマネージャーを作成し、そのコントローラープロパティとして Effectively Enabled プロパティを使用します。

フォーカスについて詳しく知るには、フォーカス と フォーカスの使用 を参照してください。

Kanzi ステートマネージャーについて詳しく知るには、ステートマネージャー (State Manager) を参照してください。

ノードが入力にどのように反応するかを制御するには:

  1. Node Tree または Prefabs でノードを選択し、State Tools でステートグループを作成して名前を付けます。

    たとえば、ステートグループ Enabled の名前を付けてください。

    ../../_images/select-button1.png ../../_images/button-in-preview.png ../../_images/create-state-group.png ../../_images/enabled-state-group.png
  2. State Tools で、ノードが使用中のときの外観と動作を定義するステートと、使用されていないときのノードを定義するステートの2つを作成します。

    例えば、ステートに Enabled と Disabled という名前を付けます。

    ../../_images/enabled-disabled-states.png
  3. 各ステートごとに、そのステートにおけるノードの外観と動作を定義します。

    例えば、ノードが使用されていないときの見た目を設定するには、Disabled ステートで Opacity プロパティを0.3に設定します。

    ../../_images/opacity-0.3.png ../../_images/set-to-disabled-state.png ../../_images/opacity-set-disabled-state.png
  4. State Tools で、Controller Property を Input > Effectively Enabled に設定します。

    Effectively Enabled プロパティは、ノードおよびその祖先ノードが有効かどうかを示します。

    ../../_images/set-effectively-enabled-controller-property.png
  5. State Tools で、Disabled ステートの Effectively Enabled コントローラープロパティの値を False に設定します。

    これにより、アプリケーションが次を使用するように設定します:

    • ノードが使用されておらず、入力に反応しないときの Disabled 状態。

    • ノードが使用中で入力に反応する際の Enabled 状態。

    ../../_images/set-effectively-enabled-false.png
  6. State Tools で、Edit State Manager をクリックして State Tools を非アクティブ化します。

    ../../_images/exit-state-tools.png

Input > Enabled プロパティの値を変更すると、ノードの外観が変わります。Enabled プロパティを無効にして Preview でノードと対話しようとすると、ノードは反応しません。

../../_images/node-enabled-disabled.gif

どのノードが入力を受け取るかを定義する

ユーザーインターフェースを作成する際には、アプリケーションが入力をどのように処理するかに注意してください。なぜなら、一度に入力を受け取ることができるノードは1つだけだからです。例えば、クリックが前面のノードによって処理されるのか、それとも背後のノードによって処理されるのかを定義してください。

Kanzi はヒットテストを使用して、入力を受け取るノードを決定します。実際には、ヒットテストは入力イベントの画面座標に基づいて、カメラから3Dシーンに向かってレイを投影します。

デフォルトで、ヒットテストは Button、Toggle Button、List Box Item Container、Scroll View、Slider、および Text Box ノードに対して有効になっています。

他のノードタイプのノードに対してヒットテストを有効にするには、そのノードに Input > Hit Testable プロパティを追加して有効にします。3Dノードは、そのノードまたはその祖先が Hit Testable プロパティを有効にしている場合にヒットテストが有効になります。

Camera ノードから最初の3Dノードで、バウンディングボックスが交差し、ヒットテストが有効になっているものが入力を受け取り、イベントを消費し、クリックメッセージを送信するなどのセットアクションを生成します。

例えば、Box ノードを2つ配置し、BoxFront ノードが BoxRear ノードの前にあり、それを隠す場合:

  • BoxFront ノードは、BoxFront ノードの Hit Testable プロパティが有効になっているときに入力を受け取ります。

  • BoxRear ノードは、BoxFront ノードによって覆われている場合でも、次の条件で入力を受け取ります:

    • BoxFront ノードの Hit Testable プロパティは無効になっています。

    • BoxRear ノードの Hit Testable プロパティが有効になっています。

../../_images/hit-testable.gif

3Dノードの入力エリアのサイズを設定する

Kanzi では、3Dノードのヒットテストはデフォルトで、そのノードのバウンディングボックスに基づいて行われます。

3Dコンテンツが入力を受け取る領域を変更したい場合は、Input > Hit Testable Container プロパティを使用してください。

Hit Testable Container プロパティを有効にすると、Kanzi はプロパティを持つ3Dノードの実際のレイアウトサイズと、その子ノードの実際のレイアウトサイズを入力エリアに含めます。3Dノードの実際のレイアウトサイズは、Actual Layout Width、Actual Layout Height、および Actual Layout Depth プロパティの値によって決定されます。

これらのノードでは、Hit Testable Container プロパティはデフォルトで有効になっています。

  • Button 3D

  • List Box Item Container 3D

  • Scroll View 3D

  • Slider 3D

他のタイプの3Dノードの入力エリアのサイズを設定するには、次のプロパティを追加して有効にします。

  • Hit Testable Container

  • Hit Testable

レイアウトコントロールノードでないノードや、レイアウトコントロールノードの子でないノードの場合、そのノードの実際のレイアウトサイズはゼロであることに注意してください。例えば、親ノードがレイアウトコントロールノードでない Empty Node 3D や Model ノードの実際のレイアウトサイズはゼロです。このようなノードを使用して入力エリアのサイズを設定したい場合は、そのノードをレイアウトコントロールノードに配置してください。レイアウトコントロール (Layout control) ノード を参照してください。

例えば、Stack Layout 3D ノードが Box ノードを含んでいる場合、クリック入力を受け取ります。

  • Stack Layout 3D ノードの Hit Testable Container プロパティが無効になっている場合、Box ノードの Width、Height、および Depth プロパティで定義された領域から

  • Stack Layout 3D ノードの Hit Testable Container プロパティが有効になっている場合、Stack Layout 3D または Box ノードの Layout Width、Layout Height、および Layout Depth プロパティで定義された領域から

../../_images/hit-testable-container.gif

アプリケーションでの入力処理を無効にする

Kanzi アプリケーションはデフォルトで入力を処理します。パフォーマンスを最適化するために、入力処理が不要なアプリケーションでは入力処理を無効にすることができます。入力を無効にすると、Kanzi はプラットフォームから受け取る入力イベントにCPUリソースを費やしません。入力処理を無効にすると、アプリケーションはキーのフォーカスも管理できなくなることに注意してください。

入力処理とキーのフォーカス管理を無効にするには、Application::setScreenOverride 関数をオーバーライドします。

// To disable input handling and key focus management, leave the implementation empty.
void setScreenOverride() override
{
}

関連項目

Click Manipulator を使用する

Long-Press Manipulator を使用する

Multi-Click Manipulator を使用する

Key Manipulator を使用する

Navigation Manipulator を使用する

Drag-And-Drop Manipulator を使用する

Pan Manipulator を使用する

Pinch Manipulator を使用する

フォーカス

Button ノードを使用する

Toggle Button ノードを使用する

リストボックス (List Box) ノード

List Box Item Container プレハブを使用する

Scroll View ノードを使用する

Slider ノードを使用する

Text Box ノードを使用する

ステートマネージャー (State Managers) を使用する場合

トリガーの使用

レイアウトコントロール (Layout control) ノード

アプリケーション開発