ナビゲーションイベントは、ユーザーが D パッドを押した時、ジョイスティックを動かした時、Escape
キー、Enter
キー、矢印キーを押した時にランタイムに発生します。これは、ユーザーが UI を操作しようとしていることを示すものですが、キーボードのような特定の入力デバイスに限定されるものではありません。フォーカス](UIE-Focus-Events.html) イベントとの違いは、ナビゲーションイベントは新しい UI 要素にフォーカスを移動させる必要がないことです。
すべてのナビゲーションイベントの基本クラスは NavigationEventBase です。
すべてのナビゲーションイベントでトリクルダウンやバブルアップが行われ、キャンセル可能ですが、バブルアップ伝播の段階でこれらのイベントをリッスンすることを推奨します。これは、ナビゲーションイベントが、個々のコントロールとの相互作用に使われる可能性のある入力イベントによってトリガーされるためです。例えば、ボタンをクリックするとボタンが反応し、Enter
キーが押され、NavigationSubmitEvent
がキャンセルされます。バブルアップの段階でこれらのイベントをリッスンすることにより、ナビゲーションイベントであることが明白になります。
イベント | 説明 | 下降伝播 | 上昇伝播 | キャンセル可能 |
---|---|---|---|---|
NavigationMoveEvent | ユーザが動作入力を行うと送信されます。 | ✔ | ✔ | ✔ |
NavigationCancelEvent | ユーザーがマウスを動かすと送信されます。 | ✔ | ✔ | ✔ |
NavigationSubmitEvent | ユーザが送信入力を行うと送信されます。 | ✔ | ✔ | ✔ |
NavigationMoveEvent
は、ユーザーが D パッドを押すとき、ジョイスティックを動かすとき、矢印キーを押すときに送信されます。
コントロールの中には、独自の機能として矢印キーを使用するものがあります。例えば、ListView を使うと、ユーザーが上下の矢印キーを使って項目を選択することが可能になります。この場合、コントロールは NavigationMoveEvent
キャンセルし、イベントはバブルアップの段階に入りません。
direction
: ナビゲーションの方向。 (None
, Left
, Up
, Right
, Down
)
move
: 移動ベクトル。イベントがジョイスティックのようなアナログ軸入力によってトリガーされた場合、このプロパティは方向ベクトルへのアクセスを与えます。
NavigationCancelEvent
は、ユーザーがキーボードの Escape
キーを押すなどして、現在のナビゲーションアクションをキャンセルするときにトリガーされます。このイベントは現在フォーカスされている要素には影響しません。つまり、キャンセルされる前にフォーカスされていた UI 要素は選択されたままであることに注意してください。
NavigationSubmitEvent
は、ユーザーがキーボードの Enter
キーを押すなどして送信ボタンを押すときにトリガーされます。
コントロールが自らイベントを処理する場合、イベントをキャンセルし、バブルアップ段階に入るのを防ぎます。例えば、フォーカスがある TextField は、NavigationSubmitEvent
がバブルアップするのを止めます。一方、フォーカス可能な Label や Image は、NavigationSubmitEvent
は親要素までバブルアップし、必要に応じてイベントを処理できるようにします。
以下のコード例は、ランタイム UI でナビゲーションイベントのコールバックを登録する方法を示しています。
using UnityEngine.UIElements;
public class MyNavigationHandler : MonoBehaviour
{
void OnEnable()
{
// Get a reference to the root visual element
var uiDocument = GetComponent<UIDocument>();
var rootVisualElement = uiDocument.rootVisualElement;
// Register for navigation events
rootVisualElement.RegisterCallback<NavigationCancelEvent>(OnNavCancelEvent);
rootVisualElement.RegisterCallback<NavigationMoveEvent>(OnNavMoveEvent);
rootVisualElement.RegisterCallback<NavigationSubmitEvent>(OnNavSubmitEvent);
}
private void OnNavSubmitEvent(NavigationSubmitEvent evt)
{
Debug.Log($"OnNavSubmitEvent {evt.propagationPhase}");
}
private void OnNavMoveEvent(NavigationMoveEvent evt)
{
Debug.Log($"OnNavMoveEvent {evt.propagationPhase} - move {evt.move} - direction {evt.direction}");
}
private void OnNavCancelEvent(NavigationCancelEvent evt)
{
Debug.Log($"OnNavCancelEvent {evt.propagationPhase}");
}
}
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.