🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1340閲覧

UnityのInput.GetKeyのSpaceを押しながらの動作

katuobushi_iron

総合スコア5

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/11/15 03:58

編集2019/11/15 04:30

前提・実現したいこと

unityで
if (Input.GetKey(KeyCode.W)){}
if (Input.GetKey(KeyCode.S)){}....
というような移動方式

発生している問題・エラーメッセージ

スペースキーを押しながらの場合、Wを押すとA,S,Dが反応せず、A,S,Dを押すとWが反応しない
エラーメッセージ
なし

該当のソースコード

C#
ソースコード
if (Input.GetKey(KeyCode.W)) {transform.position = new Vector3 (transform.position.x, transform.position.y + speeds * Time.deltaTime, 0);}
if (Input.GetKey(KeyCode.S)) {transform.position = new Vector3 (transform.position.x, transform.position.y - speeds * Time.deltaTime, 0);}
if (Input.GetKey(KeyCode.D)) {transform.position = new Vector3 (transform.position.x + speeds * Time.deltaTime, transform.position.y, 0);}
if (Input.GetKey(KeyCode.A)) {transform.position = new Vector3 (transform.position.x - speeds * Time.deltaTime, transform.position.y, 0);}

試したこと

if (..){test = 1;}のようにして感知しているかの確認

補足情報(FW/ツールのバージョンなど)

Unity 2019.1.2f1 2019.1.12
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2019/11/15 04:22

お使いのキーボードは何キーまで同時押しを検出してくれるんでしょうか。 「キーロールオーバー 確認」等で検索して、3点以上の入力が可能か確認をしてください。
BluOxy

2019/11/15 04:25

また、"deataTime"とタイプミスが見受けられるので、そもそもコンパイルエラーで実行できないと思いますが、いかがでしょうか。手打ちで入力したのであれば、そうではなくコピー&ペーストで質問内容に記載して頂けると幸いです。
katuobushi_iron

2019/11/15 04:34

ご指摘ありがとうございます、打ち間違いを修正しました。 同時押しについては3キーまでは確実に可能です。
BluOxy

2019/11/15 04:40 編集

スペースを押したときの処理を同じスクリプト上で行っているのであれば、そちらのコードも記載してください。
katuobushi_iron

2019/11/15 04:42

現在は行っていません。使用スクリプトはこちらになります。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class pl : MonoBehaviour { public float speed = 0; public float speeds = 0; public float act = 0; public float act2 = 0; public GameObject tt; public GameObject tt2; public GameObject tt3; public GameObject tt4; public Text tx; public Text b1; public Text b2; public Text b11; public Text b21; public Text b22; GameObject stack; public stack script3; public Text tet; public BB scriptT; // Start is called before the first frame update void Start() { stack = GameObject.Find ("記録くん"); script3 = stack.GetComponent<stack>(); } // Update is called once per frame void Update() { act = 0; speeds = speed; if (Input.GetKey(KeyCode.LeftShift)){speeds = speed * 2f;} if (tt.transform.localScale.x == 1){speeds = 0;} if (tt2.transform.localScale.x == 1){speeds = 0;} if (tt3.transform.localScale.x == 1){speeds = 0;} if (Input.GetKey(KeyCode.W)) {transform.position = new Vector3 (transform.position.x, transform.position.y + speeds * Time.deltaTime, 0);} if (Input.GetKey(KeyCode.S)) {transform.position = new Vector3 (transform.position.x, transform.position.y - speeds * Time.deltaTime, 0);} if (Input.GetKey(KeyCode.D)) {transform.position = new Vector3 (transform.position.x + speeds * Time.deltaTime, transform.position.y, 0);} if (Input.GetKey(KeyCode.A)) {transform.position = new Vector3 (transform.position.x - speeds * Time.deltaTime, transform.position.y, 0);} if (Input.GetKeyDown(KeyCode.E)){act = 1;} script3.pos = this.transform.position; } }
BluOxy

2019/11/15 05:11 編集

コードはざっくり見た感じでは問題がなさそうに見えます。強いていうならば「A」と「W・S・Dのいずれか」を2つ同時押ししてもA単体を押したときと振る舞いが変わらないような実装に見えます。 話を戻しますが、類似と思われる質問がありました。 https://teratail.com/questions/195996 例えば、Ctrl+Shift+Delなどの組み合わせはOKかもしれませんが、スペースとアルファベットのキーを同時押しした場合、2キーしか認識されない可能性があります。 キーボードの機種を質問に記載して頂くか、「スペース+任意のアルファベットのキー」の組み合わせで3キー以上同時に入力できるかを確認して頂けるでしょうか。
katuobushi_iron

2019/11/15 05:10

すいません。しっかり同時押しを調べたところ、W+Spaceの後Aの段がどれも反応しなくなることが分かりました。たぶんキーボードによるものです、お騒がせしました。
guest

回答1

0

ベストアンサー

コード上問題ないのでしたら、キーボードに問題がある可能性があります。
一般的なキーボードでは2キーまで(組み合わせによって変わりますが)しか検出せず、2キーロールオーバーと言われる仕様のようです。

なので、3キー対応の組み合わせに変えるか、Nキーロールオーバーに対応している物に変える必要があるかと思います。

なぜPCのキーボードは「3キー以上の同時押し」ができないのか

投稿2019/11/15 04:30

simapiko

総合スコア332

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

katuobushi_iron

2019/11/15 04:40

Spaceを押しながらでもA,SやS,Dは押せるので同時押し自体に問題はないと思われるのですが、Wを押したときのみA,S,Dが反応しません。情報があれば、教えていただけると助かります。
simapiko

2019/11/15 05:03

回答にも書いてありますが、組み合わせによって3キー、4キーと変わってきます。「キーロールオーバー 確認」で調べると下記のサイトのような同時押しを調べられるソフトが出てくるので、そちらで調べるとより正確化と思われます。 https://www.4gamer.net/games/026/G002688/20120302062/ 上記が問題が無ければ、if処理の中にdebug.Log等でどのタイミングでつまづいているか、どういう場合で発生するかなど地道に原因を探す必要があるかと思います。
katuobushi_iron

2019/11/15 05:10

すいません。しっかり同時押しを調べたところ、W+Spaceの後Aの段がどれも反応しなくなることが分かりました。たぶんキーボードによるものです、お騒がせしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問