Unityでキーボード操作、マウス操作、タッチ操作などの入力でゲーム操作を行う場合、「InputSystem」もしくは「InputManager」を利用します。今回は、新入力システム(InputSystem)と旧入力マネージャー(InputManager)の変換を確認します。
はじめに
Unityのバージョンは6.4です。下記はマウスでゲーム画面に線を引くのを「InputManager」を利用して作成しました。これを「InputSystem」に置き換えて実装してみます。
実装開始
まずは上記記事にある「InputManager」を利用したパターンの確認です。空オブジェクトを追加して、LineRendererを追加します。

下記スクリプトを作成します。
using UnityEngine;
public class LineDrawScript : MonoBehaviour
{
[SerializeField] private LineRenderer _rend;
[SerializeField] private Camera _cam;
private void Update()
{
Vector2 mousePos = _cam.ScreenToWorldPoint(Input.mousePosition);
if (Input.GetMouseButton(0))
SetPosition(mousePos);
}
private void SetPosition(Vector2 pos)
{
_rend.positionCount++;
_rend.SetPosition(_rend.positionCount - 1, pos);
}
}
スクリプトをアタッチして、パラメータをセットします。

Unity6.4でデフォルトの状態で実行すると、下記エラーが表示されて実行できないです。
InvalidOperationException: You are trying to read Input using the UnityEngine.Input class, but you have switched active Input handling to Input System package in Player Settings.
有効にするには、「Edit」→「Project Settings…」を選択。

「Player」の「OtherSettings」内にある「ActiveInputHandling」を「InputManager(Old)」または「Both」に変更すると実行する事が出来ます。

同じ動作を「InputSystem」を利用すると下記スクリプトになります。
using UnityEngine;
using UnityEngine.InputSystem;
public class LineDrawScript : MonoBehaviour
{
[SerializeField] private LineRenderer _rend;
[SerializeField] private Camera _cam;
private void Update()
{
Vector2 mousePos = _cam.ScreenToWorldPoint(Mouse.current.position.ReadValue());
if(Mouse.current.leftButton.isPressed)
SetPosition(mousePos);
}
private void SetPosition(Vector2 pos)
{
_rend.positionCount++;
_rend.SetPosition(_rend.positionCount - 1, pos);
}
}
条件付きコンパイルを利用して下記の様に記載すると、どの設定でも実行できます。
using UnityEngine;
using UnityEngine.InputSystem;
public class LineDrawScript : MonoBehaviour
{
[SerializeField] private LineRenderer _rend;
[SerializeField] private Camera _cam;
#if ENABLE_INPUT_SYSTEM
private void Update()
{
Vector2 mousePos = _cam.ScreenToWorldPoint(Mouse.current.position.ReadValue());
if (Mouse.current.leftButton.isPressed)
SetPosition(mousePos);
}
#elif ENABLE_LEGACY_INPUT_MANAGER
private void Update()
{
Vector2 mousePos = _cam.ScreenToWorldPoint(Input.mousePosition);
if (Input.GetMouseButton(0))
SetPosition(mousePos);
}
#endif
private void SetPosition(Vector2 pos)
{
_rend.positionCount++;
_rend.SetPosition(_rend.positionCount - 1, pos);
}
}
下記の様に無効箇所がグレー表示になります。

公式マニュアルは下記になります。旧入力マネジャー(InputManager)と新入力システム(InputSystem)の対応表も記載されています。
