docs.unity3d.com
    目次を表示する/隠す

    On-Screen Control

    On-Screen Control を使用すると、ユーザーが画面上で操作できる UI ウィジェットを表示して、Input Device のシミュレーションを行うことができます。特にわかりやすい例が、スティックとボタンのウィジェットをタッチスクリーンで使用して、ジョイスティックやゲームパッドをエミュレートする場合です。

    現在、すぐに使用できる Control タイプとして、ボタン と スティック の 2 つが実装されています。OnScreenControl 基本クラスを拡張して、カスタム Control を実装することもできます (詳細については、カスタム On-Screen Control の作成 に関するドキュメントを参照してください)。

    ノート: On-Screen Control には、視覚的な表現は事前定義されていません。Control の視覚的要素を設定するのは開発者の役割です (例えば、ゲームオブジェクトにスプライトや UI コンポーネントを加えることができます)。On-Screen Control は、インタラクションロジックと、インタラクションから入力を設定して生成する処理を担当します。

    各 On-Screen Control は、Control パス を使用して、入力の報告元とする Control を参照します。例えば、以下の on-screen ボタンは、ゲームパッドの右ショルダーボタンとして入力を報告します。

    OnScreenButton

    シーンに存在する On-Screen Control のコレクションにより、1 つ以上の Input Device が形成されます。Input System では、Control が参照している固有の Device タイプごとに 1 つの Input Device が作成されます。例えば、ある on-screen ボタンが <Gamepad>/buttonSouth を参照し、別の on-screen ボタンが <Keyboard>/a を参照している場合は、Gamepad と Keyboard の両方が 1 つずつ作成されます。これは、コンポーネントが有効化されたときに自動的に行われます。無効になると、これらの Device が自動的に再び削除されます。

    On-Screen Control の入力先となる Control (および、暗示的には Device) を照会するには、OnScreenControl.control プロパティを使用できます。

    ノート: この設計により、On-Screen Control を使用して、ジョイスティックとゲームパッドだけでなく、任意の Input Device に対する入力を作成することができます。

    On-Screen ボタン

    On-Screen ボタンを作成するには、以下のステップを実行します。

    1. UI Button オブジェクトを加えます。
    2. そのオブジェクトに OnScreenButton コンポーネントを加えます。
    3. Control Path が ButtonControl を参照するように設定します (<Gamepad>/buttonSouth など)。コントロールパスによって参照されるデバイスのタイプに応じて、コンポーネントによって作成される仮想デバイスのタイプが決まります。

    OnScreenButton

    OnScreenButton コンポーネントでは、ターゲット Control が Button Control であることが必要です。OnScreenButton は、ポインター押下 (IPointerDownHandler.OnPointerDown) イベントを受け取ったときにターゲット Control の値を 1 に設定し、ポインター解放 (IPointerUpHandler.OnPointerUp) イベントを受け取ったときに 0 に設定します。

    On-Screen スティック

    On-Screen スティックを作成するには、以下のステップを実行します。

    1. UI Image オブジェクトを作成します。
    2. そのオブジェクトに OnScreenStick コンポーネントを加えます。
    3. Control Path が Vector2Control を参照するように設定します (<Gamepad>/leftStick など)。コントロールパスによって参照されるデバイスのタイプに応じて、コンポーネントによって作成される仮想デバイスのタイプが決まります。

    OnScreenStick

    OnScreenStick コンポーネントでは、ターゲット Control が Vector2 Control であることが必要です。OnScreenStick は、ポインター押下 (IPointerDownHandler.OnPointerDown) イベントを受け取ると、スティックの Control の移動を開始し、ポインター解放 (IPointerUpHandler.OnPointerUp) イベントを受け取ると停止します。

    その間、スティックは、ポインターが押された画面位置を中心として、コンポーネントの Movement Range プロパティで定義された長さの境界線を持つ四角形の内部を、ドラッグされる (IDragHandler.OnDrag) ポインターに従って動きます。例えば、移動範囲が 50 の場合、スティックの on-screen 領域は、画面上でポインターが押された位置から上下左右に 25 ピクセルの範囲になります。

    ユーザーによる On-Screen スティックのタッチの開始および終了時に通知を受け取るには、コンポーネントに IPointerDownHandler、IPointerUpHandler、またはその両方を実装し、それをスティックの GameObject に加えます。

    カスタムの On-Screen Control の作成

    OnScreenControl を拡張すると、新しいタイプの Input Control のサポートを追加できます。わかりやすい例は、OnScreenButton です。

        [AddComponentMenu("Input/On-Screen Button")]
            public class OnScreenButton : OnScreenControl, IPointerDownHandler, IPointerUpHandler
            {
                public void OnPointerUp(PointerEventData data)
                {
                    SendValueToControl(0.0f);
                }
    
                public void OnPointerDown(PointerEventData data)
                {
                    SendValueToControl(1.0f);
                }
    
                [InputControl(layout = "Button")]
                [SerializeField]
                private string m_ControlPath;
    
                protected override string controlPathInternal
                {
                    get => m_ControlPath;
                    set => m_ControlPath = value;
                }
            }
    
    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)