facebook twitter hatena line email

「Unity/Csharp/キー入力/InputSystem」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(サンプル)
(Admin がページ「Unity/InputSystem」を「Unity/Csharp/キー入力/InputSystem」に、リダイレクトを残さずに移動しました)
 
(同じ利用者による、間の16版が非表示)
行9: 行9:
 
*InputManager(旧
 
*InputManager(旧
 
*InputSystem(新
 
*InputSystem(新
新旧があり、どちらかを指定することができる。
+
新旧があり、どちらかを指定することができる。(Bothを指定すると両方使うことができる)
  
 
Unityメニュー/Edit/Project Setting/Player/Configuration
 
Unityメニュー/Edit/Project Setting/Player/Configuration
行48: 行48:
  
 
参考:https://gametukurikata.com/basic/inputsystem
 
参考:https://gametukurikata.com/basic/inputsystem
 +
 +
==InputSystem設定追加==
 +
#Assetsでcreate/Input Actionsを選択する
 +
#Open input systemを選択し、保存すると、InputSystem.inputsettingができる
 +
#OpenInput Settings Windowを開き、suppoted DevicesにKeyboardなどを登録
  
 
==InputAction登録==
 
==InputAction登録==
 
#Assetsでcreate/Input Actionsを選択する
 
#Assetsでcreate/Input Actionsを選択する
#newControlsができるのでMyControlsへ変更
+
#NewControlsができるのでMyControlsへ変更
 
#Edit assetを選択
 
#Edit assetを選択
#左上のschemaでnew schemaを選択してKeyBoardを選択
+
#左上のNo Controll Schemeを選択
 +
#add control schemeを選択
 +
#+を選択してKeyBoardを選択
 
#ActionMapsはPlayerとする
 
#ActionMapsはPlayerとする
 
#ActionsはFireとする
 
#ActionsはFireとする
行62: 行69:
 
#GameObjectを作成し、AddComponentからPlayInputを選択
 
#GameObjectを作成し、AddComponentからPlayInputを選択
 
#PlayerInputのActionsにMyControlsをドラッグ
 
#PlayerInputのActionsにMyControlsをドラッグ
 +
 +
InputActionのとり方。
 +
<pre>
 +
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");
 +
        }
 +
    }
 +
}
 +
</pre>
 +
  
 
参考:https://tsubakit1.hateblo.jp/entry/2019/01/09/001510
 
参考:https://tsubakit1.hateblo.jp/entry/2019/01/09/001510
 +
 +
参考:https://gametukurikata.com/basic/inputsystem
 +
 +
参考:https://zenn.dev/k1togami/articles/eea2cd01d4199c
 +
 +
==UniRxのActionInputサンプル==
 +
<pre>
 +
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();
 +
    }
 +
}
 +
</pre>
 +
 +
InputSystemExtention.cs
 +
<pre>
 +
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);
 +
    }
 +
}
 +
</pre>
 +
 +
参考:https://qiita.com/enpel/items/12e82f230a663b44ee00

2023年5月9日 (火) 12:46時点における最新版

InputSytemとは

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

インストール

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

競合プラグイン

  • InputManager(旧
  • InputSystem(新

新旧があり、どちらかを指定することができる。(Bothを指定すると両方使うことができる)

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