「Unity/Csharp/キー入力/InputSystem」の版間の差分
提供: 初心者エンジニアの簡易メモ
(→InputActionのサンプル) |
細 (Admin がページ「Unity/InputSystem」を「Unity/Csharp/キー入力/InputSystem」に、リダイレクトを残さずに移動しました) |
||
(同じ利用者による、間の5版が非表示) | |||
行9: | 行9: | ||
*InputManager(旧 | *InputManager(旧 | ||
*InputSystem(新 | *InputSystem(新 | ||
− | 新旧があり、どちらかを指定することができる。 | + | 新旧があり、どちらかを指定することができる。(Bothを指定すると両方使うことができる) |
Unityメニュー/Edit/Project Setting/Player/Configuration | Unityメニュー/Edit/Project Setting/Player/Configuration | ||
行83: | 行83: | ||
fireAction = actionInput.actions["Fire"]; | fireAction = actionInput.actions["Fire"]; | ||
} | } | ||
− | + | void OnEnable() | |
{ | { | ||
fireAction.Enable(); | fireAction.Enable(); | ||
} | } | ||
− | + | void OnDisable() | |
{ | { | ||
fireAction.Disable(); | fireAction.Disable(); | ||
行110: | 行110: | ||
==UniRxのActionInputサンプル== | ==UniRxのActionInputサンプル== | ||
<pre> | <pre> | ||
+ | using UniRx; | ||
+ | using UnityEngine.InputSystem; | ||
+ | using System; | ||
public class InputSystemScene : MonoBehaviour | public class InputSystemScene : MonoBehaviour | ||
{ | { | ||
行122: | 行125: | ||
).AddTo(this); | ).AddTo(this); | ||
} | } | ||
− | + | void OnEnable() | |
{ | { | ||
fireAction.Enable(); | fireAction.Enable(); | ||
} | } | ||
− | + | void OnDisable() | |
{ | { | ||
fireAction.Disable(); | fireAction.Disable(); | ||
行133: | 行136: | ||
} | } | ||
</pre> | </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 | 参考: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設定追加
- Assetsでcreate/Input Actionsを選択する
- Open input systemを選択し、保存すると、InputSystem.inputsettingができる
- OpenInput Settings Windowを開き、suppoted DevicesにKeyboardなどを登録
InputAction登録
- Assetsでcreate/Input Actionsを選択する
- NewControlsができるのでMyControlsへ変更
- Edit assetを選択
- 左上のNo Controll Schemeを選択
- add control schemeを選択
- +を選択してKeyBoardを選択
- ActionMapsはPlayerとする
- ActionsはFireとする
- Actionsの+を選択し、
- pathでSpace keyboardを選択する
InputActionのサンプル
- GameObjectを作成し、AddComponentからPlayInputを選択
- 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); } }