質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.30%
C#

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

Q&A

解決済

1回答

758閲覧

オブジェクトをGetKeyDownで移動→停止させたい

Bis1335

総合スコア3

C#

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

0グッド

0クリップ

投稿2022/10/30 08:00

前提

Unity初心者で2dのルーレットゲームを作っています。
C♯でスクリプトを書いている途中に問題が起こりました。

実現したいこと

画面中央で静止している円が
①スペースキー入力で上方向に運動
②エンターキー入力で停止

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

エラーメッセージ自体はでていませんが、円が意図した動きにならず困っています。(エンターキーを押しても円が止まらない)

該当のソースコード

ソースコード using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerController: MonoBehaviour { public Rigidbody2D rigid2D; // Start is called before the first frame update void Start() { Application.targetFrameRate=60; this.rigid2D=GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update() { if(Input.GetKeyDown(KeyCode.Space)) { this.rigid2D.velocity=new Vector2(0,5f); if(Input.GetKeyDown(KeyCode.Return)) { this.rigid2D.velocity*=0; } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

結論から言えば、②の処理が「Spaceを押したとき(KeyDown)」「Returnを押していたら(KeyDown)」となっていることが問題です。

現状の動きをコードから日本語に起こしてみます。

void Update() { if(Spaceキーを押した瞬間) { // [A] 上方向に動かす; // {1} if(Returnキーを押した瞬間) { 動きを止める; // {2} } } // [B] }

{1}については、恐らく要求に合っています。
ですが、{2}が実行される条件をよく見てください。
if文というのはその条件が正しければ、その1個あとのを実行します。
この場合「もしSpaceキーを押した瞬間であれば」というif文で実行されるはif文の次の
{ // [A]から} // [B](これを「ブロック文」と言います)になるため、
if(スペースキーを押した瞬間)
の「もしSpaceキーを押した瞬間であれば」
という条件指定は[A]から[B]まで有効です。

つまり{2}が実行される条件は、
「Spaceキーを押した瞬間」に「Returnキーを押した瞬間」です。

では「Spaceキーを押した瞬間」と「Returnキーを押した瞬間」をどう分けたら良いかというと、単純な話で
入れ子にしなければいいだけです。

void Update() { if(スペースキーを押した瞬間) { 上方向に動かす; } if(Returnキーを押した瞬間) { 動きを止める; } }

あとはこれをご自分でコードに直してください。

投稿2022/10/30 11:51

StellaSplitter

総合スコア37

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

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

Bis1335

2022/10/31 01:42

入れ子構造を直したところうまく行きました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問