原因と解決策から言うと
原因はControl Schemeのデバイスリストが空だったのです。
「+」ボタンを押して必要なデバイスを追加することで、作成したActionは反応できるようになりました。
同じ問題同じ原因に遭った人は私一人だけではありません。
Control Schemeを作成しない(既存のすべてのControl Schemeを削除する)のも解決策になります。下記のチュートリアル動画の「Create New Input Action Asset」の節を詳しく見ると、Input Actionを作る時にControl Schemeは作られなかったです。
環境
- Unity 2022.3.2f1
- Input System 1.6.1
- macOS Ventura
問題の現象(経緯)
ネットで検索した記事を参考にし
- Input Systemパッケージを導入しました。
- Input Actionアセットを作成し、キーボードのスペースキーをJumpアクションに紐つけました。ただ、それらの記事に書いていない操作として、Input ActionアセットにControl Schemeを追加しました。
- Player Inputをキューブに追加しました。
- Actionが起こる時に実行する
OnJump
イベントメソッドを書きました。 - 自作のスクリプトをPlayer Inputと同じキューブに追加しました。
しかし、シーンをプレイする時に、スペースキーを押してもOnJump
メソッドは呼び出されなかったです。Player InputのBehaviorを
- Send Messages
- Broadcast Messages
- Invoke Unity Events
- Invoke C Sharp Events
のいずれに変えても問題は依然のままです。
下図は作成したInput Actionアセットです。
下図はシーンの構造と追加したPlayer Inputです。
Player InputのBehaviorがSend Messagesの時に書いた自作のソースコードは下記です。Invoke Unity EventsとInvoke C Sharp Eventsの時に書いたOnJump
メソッドの宣言とアクションとの紐つけ方はまた多少異なります。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
namespace FamilyDayGame2023
{
public class Obake : MonoBehaviour
{
private void OnJump()
{
Debug.Log("Obake Jump");
}
}
}
アクションに紐付けたメソッドは呼び出されないですが、Keyboard.current.spaceKey.wasPressedThisFrame
はちゃんとtrue
を返してくれます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
namespace FamilyDayGame2023
{
public class Obake : MonoBehaviour
{
private void Update()
{
if (Keyboard.current.spaceKey.wasPressedThisFrame)
Debug.Log("Obake Jump");
}
}
}
参考したInput Systemのチュートリアル記事