Tomo.Log()


Unityのnew InputSystemでKeyboard.currentがnullでハマった話

[11/25, 2020]

スーパファミコンって60fps出てるですね!!!こんにちは、トモです。Unityの新しいInputSystemでちょっとハマってしまったので、忘れないようにメモしておきます。

nullでハマった

新しいInputSystemはPackage Mangerからインストールして

Project Settings > Player > Active Input Handling

をInput System Package(New)にして、

Project Settings > Input System Package

のなかで、Create settings assetをクリックすれば使えると思っていました。

そしてコードの中で

 if (Keyboard.current.downArrowKey.wasPressedThisFrame)
 {
     // do something
 }

みたいなことをやろうとしたら、

NullReferenceException: Object reference not set to an instance of an object

と、Keyboard.current自体が、nullでエラーが出てしまいまいた。

「アルファ版(2021.0a6)を使っているからかな??」とか、「古い仕組みとバッティングしてるのかな??」とかすごい試行錯誤したのですが、理由は単純でした。

Support Devicesを設定する必要があった

Project Settings > Input System Package > Support Devices > 「+」 > Keyboardを追加する

Support Devicesにキーボードを追加しないと、ダメみたいですね。キーボードだけでなく、使いたい入力デバイスもすべて追加しておく必要があるっぽいです。
スマホゲームの場合は、「Touch Screen」も入れておく必要がありそうです。

アルファ版(2021.0a6)でNew InputSystemに切り替えができない

ちなみに、現時点でアルファ版(2021.0a6)やベータ版(2020.2.0b12)でNew InputSystemに切り替えようとすると、

Cancelling Display Dialog : This should not be called when a View's DrawRect Method is in progress

みたいな、よくわからないエラーが出てうまく切り替わりませんでした。

ネットで検索しても全然答えが見つかりませんでした。

IssueTrackerでは解決になっている??ようですが。。。

結局、自分がとったワークアラウンドとしては

一度、安定版(2020.1)などにダウングレードする > 設定を変更する > もう一度、アルファ版(2021.0a6)などにアップグレードする

で、変えることができました😀

関係ないですが、スーファミ時代のゲームの再現とか意外と難しいなーと、感じる今日この頃です。