Skip to content

Latest commit

 

History

History
134 lines (92 loc) · 3.59 KB

File metadata and controls

134 lines (92 loc) · 3.59 KB

ReactiveInputSystem

Reactive Extensions for Unity Input System

license

English README is here.

概要

ReactiveInputSystemはInput Systemのイベントやデバイス入力をObservableに変換する機能を提供するライブラリです。

セットアップ

要件

  • Unity 2021.3 以上 (Unity 2022.2 以上を推奨)
  • Input System 1.0.0 以上
  • R3 0.1.0 以上

インストール

  1. Window > Package ManagerからPackage Managerを開く
  2. 「+」ボタン > Add package from git URL
  3. 以下のURLを入力する
https://github.com/AnnulusGames/ReactiveInputSystem.git?path=src/ReactiveInputSystem/Assets/ReactiveInputSystem

あるいはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記

{
    "dependencies": {
        "com.annulusgames.reactive-input-system": "https://github.com/AnnulusGames/ReactiveInputSystem.git?path=src/ReactiveInputSystem/Assets/ReactiveInputSystem"
    }
}

拡張メソッド

ReactiveInputSystemを導入することで、InputActionPlayerInput, PlayerInputManagerなどのイベントをObservableに変換する拡張メソッドが追加されます。

using UnityEngine.InputSystem;
using R3;
using ReactiveInputSystem;

InputAction inputAction;

inputAction.StartedAsObservable(cancellationToken)
    .Subscribe(x => ...);
inputAction.PerformedAsObservable(cancellationToken)
    .Subscribe(x => ...);
inputAction.CanceledAsObservable(cancellationToken)
    .Subscribe(x => ...);

PlayerInput playerInput;

playerInput.OnActionTriggeredAsObservable(cancellationToken)
    .Subscribe(x => ...)

デバイス入力

InputRxクラスからあらゆるデバイスの入力をObservableとして取得することができます。

InputRx.OnKeyDown(Key.Space)
    .Subscribe(_ => ...);

InputRx.OnMousePositionChanged()
    .Subscribe(x => ...);

InputRx.OnGamepadButtonDown(GamepadButton.North, cancellationToken)
    .Subscribe(_ => ...);

また、OnAny**系のメソッドを使用することで、入力されたボタンの情報を取得できます。

InputRx.OnAnyKeyDown()
    .Subscribe(key => ...);

InputRx.OnAnyMouseButtonUp()
    .Subscribe(mouseButton => ...);

InputRx.OnAnyGamepadButton()
    .Subscribe(gamepadButton => ...);

その他のイベント

InputRxではInputSystemクラスのイベントやInputUserのイベントをObservableに変換するメソッドも提供されています。

// InputSystem.onAfterUpdate
InputRx.OnAfterUpdate()
    .Subscribe(_ => ...);

// InputSystem.onAnyButtonPress
InputRx.OnAnyButtonPress()
    .Subscribe(control => ...);

// InputUser.onChange
InputRx.OnUserChange()
    .Subscribe(x => ...);

InputControlPathEx

Control Path関連のユーティリティとしてInputControlPathExクラスが用意されています。

InputControlPathEx.GetControlPath()を用いることでKeyMouseButtonGamepadButtonなどの列挙型からControl Pathを取得することができます。これはInputRx.OnAny**()と組み合わせてインタラクティブなリバインディングを実装する際などに便利です。

InputAction inputAction;

async Task RebindAsync(CancellationToken cancellationToken)
{
    inputAction.Disable();

    var path = await InputRx.OnAnyKeyDown(cancellationToken)
        .Select(x => InputControlPathEx.GetControlPath(x))
        .FirstAsync();

    inputAction.ApplyBindingOverride(0, path);
    inputAction.Enable();
}

ライセンス

MIT License