![見出し画像](https://assets.st-note.com/production/uploads/images/111409223/rectangle_large_type_2_289545a4c521c38f230dccdff2c7a7af.png?width=1200)
[Unity] ビルドしたときだけキーボードで操作できないという不可解な現象
ある日の出来事
それなりに動くものが出てきたし、そろそろビルドしてスタンドアロン実行させてみるか~。
……うん? あれ?
キーボード操作で自キャラが動かない。
でもゲームパッド入力は受け付ける。
……なんで???
エディター上では動く
エディター上では再現しません。むしろ再現していたらもっと早くに気付く。
切り分け開始です。まずはいつから発生していたのか?
バージョン管理にGitを使用しているので適当なコミットをチェックアウトして再現確認を繰り返します。再現する、再現する……割と初期から再現するな???
どうやら入力移動の仕組みを実装した当初から存在した不具合のようです。全然気づいてなかったよ。
入力処理にはInputSystemを使用しています。しかし割と基本的な使い方しかしていないはずなのにどうしてこんなことが? どうにも原因が思いつきません。
そんなときはあいつの助けを借りてみよう。
助けて~ChatGPTえも~ん
というわけでざっくりとした質問をChatGPTへ丸投げ。
Q.
ビルド時のみInputSystemのキーボード入力が反応しない。ゲームパッドは反応する。なぜ?
A.
このような状況が発生する原因として、ビルド時の設定やプラットフォームの違いが考えられます。以下のいくつかの要因が考えられます。
1. プラットフォームの違い: ゲームパッドはビルドされた実行ファイルが動作するプラットフォームに対応しているが、キーボード入力は特定のプラットフォームでは正しく機能しないことがあります。特定のプラットフォームでのキーボード入力の動作を確認してください。
2. InputSystemの設定: UnityのInputSystemはプラットフォームによって異なる振る舞いをする場合があります。プラットフォームごとにInputSystemの設定を適切に行う必要があります。
3. ビルド時の設定: ビルド時に特定のオプションが有効になっている場合、キーボード入力を無効化する設定がされているかもしれません。ビルド時の設定を確認し、キーボード入力に関連するオプションが適切に設定されていることを確認してください。
4. キーボードの設定: ビルドされた実行ファイルのキーボード入力が動作するかどうかは、プレイヤーのキーボードの設定にも影響を受ける場合があります。特定のキーボードレイアウトや設定が原因で入力が認識されない可能性があります。
これらの要因を確認して、ビルド時のキーボード入力が正しく動作するように調整してください。必要に応じてUnityのInputSystemの設定を見直すことや、ビルド時のオプションを確認してみてください。また、キーボード入力に関連するエラーや警告メッセージもチェックして、問題の原因を特定する手がかりとして利用することもできます。
気になったのは3番目。
InputSysytemの設定にこのような項目を発見しました。
![](https://assets.st-note.com/img/1691261343907-EUkwHTbM4G.png?width=1200)
確かにこのゲームはキーボード操作とゲームパッド操作を想定しています。これは一見正しく見える。
しかしInputActionsのスキーマ定義を見てみると。
![](https://assets.st-note.com/img/1691261428628-PeS0OjBWSu.png)
Keyborad&Mouseになっています。実際、UI要素はマウス操作も想定している。
そしてさらにこのスキーマを編集しようとしてみると。
![](https://assets.st-note.com/img/1691261545478-0DA9cU4PE8.png)
はい、見つけましたね。使用するデバイスにマウスが存在していて、さらに Required となっています。これはすなわち、マウスが接続されていなければこのスキーマは使用されない、ということでしょう。知らんけど。
となると、最初の Supported Devices にもマウスが必要なのでは? と推測できます。
追加してみました。
![](https://assets.st-note.com/img/1691261971756-5VnoM7wXAU.png?width=1200)
動作を確認すると……動いた!
結論: スキーマ定義とデバイス設定を確認しよう
というわけで、Input System が認識するデバイスにInput Actionのスキーマが要求するデバイスが含まれていなかったことが原因でした。
「このゲームはWindows想定でタッチ操作は不要だから」などとと考えてデバイス種別を変更した際には、うっかりマウスまで消さないようにしましょう。
この記事が気に入ったらサポートをしてみませんか?