UnityUnityの使い方

Unityの使い方㉑新Input Systemの使い方完全ガイド|キーボード・ゲームパッド・スマホ対応!

Unity

1. はじめに|新Input Systemとは?

こんにちは!今回は「Unityの新Input Systemってなに?」というテーマで、初心者の方にもわかりやすく解説していきます!

Unityでは昔から「Input.GetKey()」などの命令を使って、キーボードやゲームパッドの入力を処理していましたよね。これを「旧Inputシステム」と呼びます。でも実は最近、「もっと使いやすくてパワフルな方法」として【新Input System】が登場しているんです。

新Input Systemのポイントはこれ!

  • 🔄 複数の入力デバイス(キーボード、ゲームパッド、スマホタッチ)に対応しやすい
  • 🎮 ゲームパッドのボタンや軸を「名前」で管理できる
  • 🔧 入力設定をエディタで見ながら作れるから、コードがスッキリ
  • 👥 プレイヤーが2人以上いるゲームでも、操作を分けやすい

「InputAction」という設定ファイルを使って、「ジャンプ」「移動」「攻撃」といった“動きの名前”に対して、どのキーやボタンを使うかを自由に決められるのが特徴です。

たとえば、Aボタンでジャンプ、↑キーでもジャンプ、スマホなら画面タップでジャンプ……という風に、一つのアクションに複数の操作方法を登録できちゃうんですよ!




2. 新Input Systemの導入方法

それでは、実際にUnityで「新Input System」を使えるようにしてみましょう!
ここでは導入のステップをひとつずつ解説しますね。


🔧 Step1:パッケージマネージャーからインストールしよう

まずはUnityのメニューから「Window」→「Package Manager(パッケージマネージャー)」を開いてください。

  1. 左上の項目から「Unity Registry」を選びます
  2. 「Input System」と検索して出てくるパッケージを選択
  3. 「Install」をクリック!

これで新Input Systemが使えるようになります🎉


⚙ Step2:Project SettingsでInput Systemに切り替える

次に、旧Inputシステムから「新Input System」へ切り替える設定をします。

  1. メニューから「Edit」→「Project Settings」を開く
  2. 「Player」→「Other Settings」タブを選択
  3. 「Active Input Handling」の項目を「Input System Package(New)」に変更します

✅補足:
「Both」にすると旧Inputも新Inputも同時に使えるので、移行中の人におすすめ!

設定を変更すると「Unityを再起動してください」と表示されるので、いったん再起動しましょう。


🎮 Step3:PlayerInputコンポーネントを使ってみよう

再起動したら、いよいよシーンに「PlayerInput」を使ってみましょう。

  1. ヒエラルキー(Hierarchy)ウィンドウで「右クリック」→「3D Object」→「Cube」などでプレイヤーオブジェクトを作成
  2. 作ったCubeに「PlayerInput」コンポーネントを追加します
     ➡︎ Inspectorで「Add Component」→「PlayerInput」と入力

このPlayerInputが、新Input Systemの中心的なコンポーネントです!




3. キーボード&ゲームパッド対応の実装方法

Unityの新Input Systemでは、「InputAction」という仕組みを使って、キーボードやゲームパッドの操作を簡単に設定できます。
今回は、よく使う「移動」と「ジャンプ」の操作を例に、設定からスクリプトまでやさしく紹介します!


🎮 Step1:Input Actions アセットを作ろう

まずは、操作の設定ファイルを作成します。

  1. プロジェクトウィンドウを右クリック「Create」→「Input Actions」を選びます
  2. 名前を「PlayerControls」とつけましょう

作ったアセットをダブルクリックすると、Input Actionsの設定画面が開きます。


📝 Step2:アクションを設定しよう

設定画面で、以下のように操作を追加していきます。

✅ 「Action Map」を作成(=操作カテゴリ)

  • 名前は「Gameplay」とします

✅ 「Move」アクションの設定

  1. 「Gameplay」内で「+」をクリックして「Move」というアクションを追加
  2. 「Action Type」は「Value」→「Vector2」を選ぶ(方向入力用)
  3. 「Binding」で「2D Vector」を追加して、各方向キーやゲームパッドのスティックを割り当てます
     ➡︎ 上:W / ゲームパッドの上
     ➡︎ 下:S / ゲームパッドの下
     ➡︎ 左:A / ゲームパッドの左
     ➡︎ 右:D / ゲームパッドの右

✅ 「Jump」アクションの設定

  1. 「+」で「Jump」アクションを追加
  2. 「Action Type」は「Button」
  3. Bindingは「Spaceキー」や「ゲームパッドのAボタン」などを割り当てましょう

終わったら「Save Asset」ボタンをクリック!


🧩 Step3:PlayerInputと連携しよう

次に、ヒエラルキーにあるプレイヤー(例:Cube)にInputをつなぎます。

  1. Cubeを選択し、Inspectorで「PlayerInput」コンポーネントを開きます
  2. 「Actions」に、さっき作った「PlayerControls」をドラッグ&ドロップ
  3. 「Behavior」は「Invoke Unity Events」を選びましょう

すると、自動的に「OnMove」や「OnJump」などのイベントがInspectorに出てきます!


💻 Step4:スクリプトで動きを制御しよう

プロジェクトウィンドウを右クリック「Create」→「C# Script」を選んで、新しいスクリプトを作成し、「PlayerMovement」と名前を付けます。

using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerMovement : MonoBehaviour
{
private Vector2 moveInput;
public float speed = 5f;
private Rigidbody rb;

private void Awake()
{
rb = GetComponent<Rigidbody>();
}

public void OnMove(InputAction.CallbackContext context)
{
moveInput = context.ReadValue<Vector2>();
}

public void OnJump(InputAction.CallbackContext context)
{
if (context.performed)
{
rb.AddForce(Vector3.up * 5f, ForceMode.Impulse);
}
}

private void FixedUpdate()
{
Vector3 move = new Vector3(moveInput.x, 0, moveInput.y);
rb.MovePosition(rb.position + move * speed * Time.fixedDeltaTime);
}
}

そして、作った PlayerMovement スクリプトをCubeにドラッグ&ドロップしてアタッチしてください。

最後に、PlayerInputの「OnMove」と「OnJump」欄に、Cubeオブジェクトと対応する関数(OnMove、OnJump)を紐づければ完了です!

これで、キーボードでもゲームパッドでも同じ操作ができるようになりました!🎮✨




4. タッチ操作(スマホ)への対応方法

Unityの新Input Systemを使えば、スマホのタッチ操作もばっちり対応できます!
ここでは「仮想パッド(バーチャルスティック)」や「タッチボタン」で操作する方法を、初心者向けにやさしく解説します。


📱Step1:UI Toolkitではなく「On-Screen Controls」を使おう

新Input Systemには「On-Screen Controls(オンスクリーンコントロール)」という便利な仕組みがあります。これを使えば、スマホ上にスティックやボタンを簡単に表示できます!

✅ まずは準備

  1. メニューから「GameObject」→「UI」→「Canvas」でUIを作成
  2. そのCanvasの上に、右クリック →「UI」→「Panel」で背景を作ってもOK!

🕹️Step2:On-Screen Stick(仮想スティック)を設置しよう

  1. メニューから「GameObject」→「UI」→「On-Screen Stick」を選択
  2. ヒエラルキーに表示された「On-Screen Stick」を選択し、右下などに配置
  3. 「Control Path」に */<Gamepad>/leftStick*/<Touchscreen>/primaryTouch を設定
     ➡︎ 基本的には Gamepad を想定しておけばOKです!

🔘Step3:On-Screen Button(タッチボタン)も追加しよう

  1. 同様に、「UI」→「On-Screen Button」をCanvasの中に追加
  2. 「Control Path」に */<Keyboard>/space*/<Gamepad>/buttonSouth を設定
     ➡︎ これは「Jump」アクションなどに使えます!

ボタンの見た目は Image コンポーネントでカスタマイズできるので、好きな画像を使ってもOKです。


👣Step4:Input Actionと連携する

さきほど作った Input Actions アセット(例:PlayerControls)では、
「Move」「Jump」などの操作に複数のBindingを追加できます。

たとえば…

  • Move:キーボードのWASD、ゲームパッドのスティック、仮想スティック(On-Screen Stick)
  • Jump:スペースキー、Aボタン、仮想ボタン(On-Screen Button)

といった感じで、全部の操作を一つのアクションにまとめて管理できます✨


🛠Step5:Input Debuggerで確認してみよう

動作確認には「Input Debugger」がおすすめ!

  1. メニューから「Window」→「Analysis」→「Input Debugger」
  2. 実機またはUnity Remoteなどで動かすと、どのデバイスが反応しているか確認できます

これで、スマホでもキーボードでもゲームパッドでも、1つのスクリプトで全部の入力に対応できるようになります🎉




5. よくあるトラブルと解決方法

新Input Systemはとても便利ですが、最初は「なんで動かないの!?」とつまずくこともあります。ここでは、よくあるトラブルとその解決法をまとめて紹介します!


❓ケース①:キーやボタンを押しても反応しない!

✅チェックポイント

  • 「PlayerInput」にInput Actionsアセットがちゃんと設定されているか?
  • 「Behavior」が「Invoke Unity Events」になっているか?
  • イベント欄(OnMoveやOnJump)にスクリプトの関数が割り当てられているか?

💡解決法

スクリプトの関数(例:OnJump())をイベントに割り当てるのを忘れていると、動きません!
InspectorでCubeなどのオブジェクトをドラッグして、関数をきちんとセットしましょう。


❓ケース②:スクリプトで値が取れない・Nullになる!

✅チェックポイント

  • スクリプト内で InputAction を自分で書いているなら、.Enable() を呼んでますか?
  • Awake()Start()PlayerInput が初期化されているか確認!

💡解決法

InputActionをコードで使う場合、有効化(Enable)しないと動きません
例:

moveAction = playerInput.actions["Move"];
moveAction.Enable();

❓ケース③:Unity 2023でInput Systemが効かない!

✅チェックポイント

  • Project Settingsの「Active Input Handling」が「Input System Package(New)」になってる?
  • 新Input Systemのバージョンが古くない?(→パッケージマネージャーでアップデート可能)

💡解決法

Unity 2023では、特に「Project Settings」が旧Inputのままだと動きません。
以下の記事でも詳しく解説しています👇
🔗 Unity 2023でInput Systemが動かない時の対処法


❓ケース④:スマホでタッチが反応しない!

✅チェックポイント

  • On-Screen ButtonやStickがCanvasの中に入っているか?
  • 「Control Path」の設定ミスがないか?

💡解決法

ボタンやスティックの Control Path が間違っていると、全く反応しません!
迷ったら */<Touchscreen>/press*/<Gamepad>/buttonSouth を試してみましょう。

これで多くの「動かない!」トラブルはスッキリ解決できるはずです😊




6. まとめ|Input Systemでできること・おすすめ活用法

今回はUnityの新しいInput Systemについて、導入方法から操作設定、トラブル解決まで一通りご紹介しました。
最後にもう一度、新Input Systemでできることと、今後のおすすめ活用法をまとめておきますね!


✅ 新Input Systemのここがすごい!

  • 🎮 キーボード、ゲームパッド、スマホタッチなど複数の入力デバイスに対応
  • 🔄 アクションに対して複数の操作方法を設定可能
  • 👥 複数プレイヤーに対応した設計がしやすい(マルチプレイ対応にも◎)
  • 🧼 コードと入力設定を分離できるから、スクリプトがスッキリ
  • 🔍 Input Debuggerでデバイスの動きをリアルタイム確認!

💡 おすすめ活用シーン

  1. 2人プレイ対応ゲーム:PlayerInputの「Join Behavior」を使えば、コントローラーを繋ぐだけでプレイヤーが追加可能!
  2. スマホ&PC対応ゲーム:1つのInput Actions設定で、スマホでもPCでも同じ動作ができる!
  3. UI操作との連携:ボタン・スライダー・タッチ操作などもInput Systemと連携可能。ゲームとUIを一体化した操作が作れる!

👣次にやってみよう!

  • プレイヤーごとに異なるInput Actionsを使ってマルチプレイヤーゲームを作る
  • Input Systemでメニュー画面の操作も統一して扱う
  • スクリプトだけでなく「ScriptableObject」と組み合わせて再利用性の高い入力設計を目指す

Input Systemを使いこなせれば、Unityでのゲーム開発がグッとレベルアップします!
最初はとっつきにくいかもしれませんが、慣れるともう旧Inputには戻れないくらい便利です😊


あわせて読みたい

🎮 Unity 2023でInput Systemが動かない時の対処法
→ 新Input Systemが動かない時のチェックポイントと設定方法をまとめた記事。バージョンアップ後に動かない人におすすめ!

🕹️ キー入力でカメラのアングルを切り替える方法
→ Input Systemでも応用できる、キー操作によるカメラ制御の基本テクニック!

📱 Unityでスマホゲームを作る方法|ゼロから学ぶ入門ガイド
→ タッチ操作との組み合わせにも最適!スマホ対応の基本をまとめたガイド。

🧠 Unity初心者必見!キー長押しでスクリプトを制御する方法
→ Input Systemでも「長押し」を使いたいときに参考になる基本スクリプト。

🧩 Unity初心者必見!他のスクリプトから関数を呼び出す方法
→ PlayerInputなどから外部スクリプトを呼びたいときに役立つ内容!


よくある質問(FAQ)

Q
新Input Systemと旧Input Systemはどっちを使えばいいの?
A

これから始めるなら「新Input System」一択です!
複数デバイス対応や柔軟な設定ができるため、将来的にもこちらが主流になります。
ただし、旧Inputのシンプルさが欲しい場合は「Both」に設定して併用も可能です。

Q
Input Systemが動かないときはどうしたらいい?
A

以下の3つをチェックしてください:

  1. Project Settingsで「Active Input Handling」が「Input System」になっているか?
  2. PlayerInputコンポーネントにInputActionsアセットが設定されているか?
  3. スクリプトのイベント(OnMoveやOnJump)が正しく紐づいているか?

詳しくはこちらの記事も参考にどうぞ!

Q
Input Systemはスマホでも使えますか?
A

はい、On-Screen StickやOn-Screen Buttonを使えばOKです。
タッチ操作も他のデバイスと同じ「Input Actions」で一元管理できるので便利ですよ。

C-BA Unity-memo
タイトルとURLをコピーしました