facebook twitter hatena line email

Unity/InputSystem

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

InputSytemとは

文字入力やマウスやゲームパッドなどのプラグイン

インストール

PackageManagerからRegistoryを選択して、"Input System"で検索して、Input Sytemをインストール。 今回は、ver1.0.2でした。

競合プラグイン

  • InputManager(旧
  • InputSystem(新

新旧があり、どちらかを指定することができる。

Unityメニュー/Edit/Project Setting/Player/Configuration

サンプル

using UnityEngine;
using UnityEngine.InputSystem;

public class SampleScene : MonoBehaviour
{
    void Update()
    {
        if (Keyboard.current.spaceKey.wasPressedThisFrame)
        {
            Debug.Log("space key");
        }
        if (Mouse.current.leftButton.wasPressedThisFrame)
        {
            Debug.Log("mouse down");
        }
        // キーボードのa
        if (Keyboard.current[Key.A].wasPressedThisFrame)
        {
            Debug.Log("A down");
        }
        /*
        if (Gamepad.current.buttonEast.isPressed)
        {
            Debug.Log("game pad o button");
        }
        */
    }
}

参考:https://gamedev65535.com/entry/unity_inputsystem_howtouse/

参考:https://gametukurikata.com/basic/inputsystem

InputSystem設定追加

  1. Assetsでcreate/Input Actionsを選択する
  2. Open input systemを選択し、保存すると、InputSystem.inputsettingができる
  3. OpenInput Settings Windowを開き、suppoted DevicesにKeyboardなどを登録

InputAction登録

  1. Assetsでcreate/Input Actionsを選択する
  2. NewControlsができるのでMyControlsへ変更
  3. Edit assetを選択
  4. 左上のNo Controll Schemeを選択
  5. add control schemeを選択
  6. +を選択してKeyBoardを選択
  7. ActionMapsはPlayerとする
  8. ActionsはFireとする
  9. Actionsの+を選択し、
  10. pathでSpace keyboardを選択する

InputActionのサンプル

  1. GameObjectを作成し、AddComponentからPlayInputを選択
  2. PlayerInputのActionsにMyControlsをドラッグ

InputActionのとり方。

using UnityEngine;
using UnityEngine.InputSystem;
public class InputSystemScene : MonoBehaviour
{
    InputAction fireAction;
    void Awake()
    {
        PlayerInput actionInput = GameObject.Find("PlayerInput").GetComponent<PlayerInput>();
        InputActionAsset actions = actionInput.actions;
        fireAction = actionInput.actions["Fire"];
    }
    void OnEnable()
    {
        fireAction.Enable();
    }
    void OnDisable()
    {
        fireAction.Disable();
    }
    void Update()
    {
        if (fireAction.ReadValue<float>() > 0f)
        {
            Debug.Log("Fire");
        }
    }
}


参考:https://tsubakit1.hateblo.jp/entry/2019/01/09/001510

参考:https://gametukurikata.com/basic/inputsystem

参考:https://zenn.dev/k1togami/articles/eea2cd01d4199c

UniRxのActionInputサンプル

using UniRx;
using UnityEngine.InputSystem;
using System;
public class InputSystemScene : MonoBehaviour
{
    InputAction fireAction;
    void Awake()
    {
        PlayerInput actionInput = GameObject.Find("PlayerInput").GetComponent<PlayerInput>();
        fireAction = actionInput.actions["Fire"];
        fireAction.AsObservable()
            .Subscribe(context =>
                Debug.Log("a click")
            ).AddTo(this);
    }
    void OnEnable()
    {
        fireAction.Enable();
    }

    void OnDisable()
    {
        fireAction.Disable();
    }
}

InputSystemExtention.cs

public static class InputSystemExtension
{
    public static IObservable<InputAction.CallbackContext> AsObservable(this InputAction action)
    {
        return Observable.FromEvent<InputAction.CallbackContext>(
            h => action.performed += h,
            h => action.performed -= h);
    }
}

参考:https://qiita.com/enpel/items/12e82f230a663b44ee00