新しい Input System を使うとよく見るエラー。Input.GetKey() が使われていると表示されます。
この Input.GetKey()、ライブラリパッケージなどでも使われている事があるので、私の場合 UI/InputField(TextMeshPro) でエラーになりました。
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.
UnityEngine.Input.GetKey (UnityEngine.KeyCode key) (at <2b199bce5ae14af2afceffcd4f0caaf7>:0)
TMPro.TMP_InputField.OnPointerDown (UnityEngine.EventSystems.PointerEventData eventData) (at Library/PackageCache/com.unity.textmeshpro@2.0.1/Scripts/Runtime/TMP_InputField.cs:1673)
1673: bool shift = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
確かに直接 Input.GetKey() をアクセスしていますね。
対処法:パッケージを新しくする
今回の場合はパッケージを 2.0.1 -> 2.1.4 に上げると、コードが Input System 対応のものになりました。
#if ENABLE_INPUT_SYSTEM Event.PopEvent(m_ProcessingEvent); bool shift = m_ProcessingEvent != null && (m_ProcessingEvent.modifiers & EventModifiers.Shift) != 0; #else bool shift = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift); #endif
最新バージョンでも(一時的に)対応されていない、なんらかの事情で最新に出来ない、なんて場合は泣く泣く自分でコードを書き換える必要もあるかもしれませんね。
対処法:Active Input Handling を Both に
PlayerSettings - Other Settings の設定に Active Input Handling というものがあり、これを Both にすると Input、Input System 両方の機能を使うことができます。
ただ、この設定によって入力システムが競合し問題を起こす可能性がありますし、よほど差し迫った状況でなければ、こちらの設定はオススメしません。
よろしければ Twitter をフォローしてもらえると嬉しいです!