技術資料: Unity Input System の InputAction.CallbackContext の活用方法


概要

InputAction.CallbackContext は、Unity の Input System を用いて入力イベントの詳細情報を取得するためのオブジェクトです。CallbackContext から得られる情報を活用することで、入力処理を効率的に実装できます。この資料では、各プロパティやメソッドを日本語の例を交えて説明します。


1. ReadValue<T>()

  • 説明: 入力値を指定した型 (T) で取得するメソッドです。データ型を指定することで、ジョイスティックやボタンの入力内容を取得できます。
  • 主な使い方:
  • context.ReadValue<float>(): 単一の数値入力(トリガーボタンなど)を取得する際に使用します。
  • context.ReadValue<Vector2>(): 2D ベクトルの入力(ジョイスティックの方向など)を取得します。
  • context.ReadValue<Vector3>(): 3D 入力値を取得する場合に使います。

使用例

private void OnMovePerformed(InputAction.CallbackContext context)
{
    Vector2 moveInput = context.ReadValue<Vector2>();
    Debug.Log($"移動入力: {moveInput}");
}

2. control

  • 説明: 入力イベントを引き起こした具体的な InputControl を取得します。どのデバイスのどのボタンが押されたかを知るのに役立ちます。
  • 主な使い方: デバッグや入力情報の詳細を取得する際に使用します。
  • 表示名の取得: control.displayName を使用してコントロールの表示名を取得します。

使用例

private void OnAttackPerformed(InputAction.CallbackContext context)
{
    var control = context.control;
    Debug.Log($"アタックがトリガーされたコントロール: {control.displayName}");
}

3. phase

  • 説明: 入力アクションのフェーズ(状態)を示します。入力の開始、実行、キャンセルの段階を判別するために使います。
  • フェーズの種類:
  • InputActionPhase.Started: 入力が開始された段階(ボタンが押され始めた瞬間など)。
  • InputActionPhase.Performed: 入力が実行された段階(ボタンが押されて処理が実行された瞬間など)。
  • InputActionPhase.Canceled: 入力がキャンセルされた段階(ボタンが離されたときなど)。

使用例

private void OnJumpPerformed(InputAction.CallbackContext context)
{
    if (context.phase == InputActionPhase.Performed)
    {
        Debug.Log("ジャンプアクションが実行されました!");
    }
}

4. action

  • 説明: コールバックをトリガーした InputAction を取得します。どのアクションが実行されたかを判別するのに便利です。
  • 主な使い方: 複数のアクションがある場合に、どのアクションがトリガーされたかを判別します。

使用例

private void OnActionPerformed(InputAction.CallbackContext context)
{
    var actionName = context.action.name;
    Debug.Log($"実行されたアクション: {actionName}");
}

5. interactions

  • 説明: アクションに関連するインタラクション(長押し、連打、タイミングなど)を取得します。これを使うことで複雑な入力条件を設定できます。
  • 主な使い方: 入力が特定のインタラクションを満たしているかどうかを判定する際に使います。

使用例

private void OnFirePerformed(InputAction.CallbackContext context)
{
    if (context.interaction is HoldInteraction)
    {
        Debug.Log("長押しインタラクションで発砲アクションがトリガーされました。");
    }
}

6. time

  • 説明: 入力イベントが発生した時刻を秒単位で取得します。ゲーム内での時間管理や処理のタイミング調整に役立ちます。
  • 主な使い方: イベントの発生時刻を取得して、ゲーム内のロジックに反映します。

使用例

private void OnDodgePerformed(InputAction.CallbackContext context)
{
    double eventTime = context.time;
    Debug.Log($"回避が発生した時刻: {eventTime} 秒");
}

7. duration

  • 説明: 入力アクションがどのくらいの時間続いたかを取得します。特に、ボタンの長押し処理などに使います。
  • 主な使い方: 入力の持続時間に応じて、異なる処理を実装します。

使用例

private void OnChargePerformed(InputAction.CallbackContext context)
{
    float duration = context.duration;
    Debug.Log($"チャージアクションが {duration} 秒間維持されました");
}

まとめ

  • ReadValue<T>(): 入力値を特定の型で取得します。
  • control: 入力を引き起こしたコントロールを取得します。
  • phase: 入力の状態を示します。
  • action: 実行されたアクションを取得します。
  • interactions: アクションに関連付けられたインタラクションを取得します。
  • time: 入力が発生した時刻を取得します。
  • duration: 入力が持続した時間を取得します。

これらの情報を活用して、効率的で複雑な入力処理を実装し、より洗練されたゲーム体験を提供しましょう。

Input System,Unity

Posted by hidepon