まずは問題を切り分けましょう。
■押したら何かする、離したら何かする
Input.GetKey
は「押されている間はtrue」です。ということは「離されている間はfalse」なので
if (Input.GetKey(~~~)) { 押されている時の処理 } else { 離されている時の処理 }
とすればいいです。
なお個人的には「押された瞬間だけtrue」のInput.GetKeyDown
と
「離された瞬間だけtrue」のInput.GetKeyUp
を使った方がいいと思います。
(Input.GetKeyのelseにした場合、離されている間ずっと移動用コードが呼ばれるので負荷やバグが気になる)
■1つのスクリプトでオブジェクトを見分ける
自身のGameObjectの名前を取得して判別するか、メンバ変数を設けてインスペクタから設定しましょう。
つまりifの条件をもう1つ増やします。
オブジェクト名で判別するならこう。
if (gameObject.name == "Left" && Input.GetKey(KeyCode.Q)) { ~~~ }
(左のキューブのオブジェクト名を「Left」にしておく)
メンバ変数で判別するならこう。
public bool isLeft;
←メソッドの外で宣言しておく
if (isLeft && Input.GetKey(KeyCode.Q)) { ~~~ }
(左のキューブのインスペクタ上でisLeftにチェックを入れておく)
この辺りは基礎中の基礎なので、わからないようなら適宜ググってください。
ちなみに、オブジェクトを見分けるのではなく「インスペクタから使用するKeyCodeをそれぞれ指定する」という方法でも可能です。
C#
1public KeyCode useKey; //←インスペクタから設定しておく
2
3void Update() {
4 if (Input.GetKeyDown(useKey)) {
5 transform.position = new Vector3(0, 1, 0);
6 } else if (Input.GetKeyUp(useKey)) {
7 transform.position = new Vector3(0, 0, 0);
8 }
9}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/07 06:10