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

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

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

Q&A

解決済

1回答

451閲覧

Unity 押していないのに繰り返し動いてしまう

hjjgkhl

総合スコア11

0グッド

0クリップ

投稿2022/07/26 06:54

前提

Unityの2Dプロジェクトで簡易的な手押し相撲のゲームを作っています。

実現したいこと

一回スペースキーを押したら、一回だけX軸-1.5fから右方向に滑らかに動いてX軸が2.1fになると、スタート位置(-1.5f, 0.5f, 0f)に戻って止まってほしい。

発生している問題

スペースキーを一回押すとX軸の-1.5fから2.1付近まで動いて、2.1f以上になると-1.5fへ戻るが、止まらないで右方向に2.1fまで動いて-1.5fに戻り、動く挙動をずっと繰り返してしまう。

間違っているところを指摘してくれると幸いです

該当のソースコードC#

using UnityEngine;
public class Player : MonoBehaviour

{

public float startPosition; public float staryPosition; GameObject enemy; Rigidbody2D rigidbody; GameObject player; // Start is called before the first frame update void Start() { enemy = GameObject.Find("Enemy"); check = GetComponent<Check>(); startPosition = transform.position.x; staryPosition = transform.position.y; rigidbody = GetComponent<Rigidbody2D>(); player = GameObject.Find("Player"); }// Update is called once per frame void Update() { Challenge(); Avoid(); Retry(); } private void OnTriggerEnter2D(Collider2D collision) { if(collision.gameObject.tag == "Enemy") { if(transform.position.x > 0.5f) { Debug.Log("ぶつかったよ"); enemy.transform.Rotate(new Vector3(0, 0, -10)); ScrollEnd(); } else { ScrollEnd(); } } } void Challenge() { if(Input.GetKeyDown("space")) { rigidbody.velocity = new Vector3(1.5f, 0f, 0f) * 3; } } void ScrollEnd() { Vector3 v = new Vector3(-1.5f, 0.5f, 0f); transform.position = v; } private void FixedUpdate() { if(transform.position.x >= 2.1f) { ScrollEnd(); }

}

試したこと

① if(Input.GetKeyDown("space")){Debug.Log("OK");}とすると押した時にConsoleでOKと反応しました。
②一回スペースキーを押すとrigidbody.velocity = new Vector3(1.5f, 0f, 0f) * 3;で右方向に滑らかに移動してx軸が2.1になるとFixUpdate()内のScrollEnd()で(-1.5f, 0.5f, 0f)のポジションに戻り、スペースキーを押していないのに繰り返し右方向に動いて2.1fになるとX軸-1.5へ戻り、2.1fへ動く挙動を繰り返してしまう。
③if(Input.GetKeyDown("space"))をif(Input.GetKey(KeyCode.W))に変更すると反応はして、②と同じ挙動をしました。
④if(Input.GetKeyDown("space"))
{
rigidbody.velocity = new Vector3(1.5f, 0f, 0f) * 3;
}を
if(Input.GetKeyDown("space"))
{
transform.Translate(1.0f, 0f, 0f);
}
で試すと、一回目に一回スペースキーを押すとx軸方向に滑らかではなく、瞬時に-1.5から-0.5へ移動し、二回目に一回スペースキーを押すと-0.5から1.5へと瞬時に移動する。
三回目に一回スペースキーを押すと2.1fまで動き、-1.5fに戻り、スペースキーを押しても右方向に動かず、if(Input.GetKeyDown("space")){Debug.Log("OK");}としても
ConsoleでOKと反応しませんでした。

⑤Update()
{
transform.Translate(1.0f, 0f, 0f);
}
で試すと滑らかにX軸-1.5fから2.1fに移動し、-1.5fに戻り、繰り返し右方向に移動して2.1fになると-1.5fに戻り2.1fへ動く挙動を繰り返しました。

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

enemyは敵のゲームオブジェクトです。
enemyにRigidbody2D, BoxCollider2Dを付加しています。
PlayerにはRigidbody2D,BoxCollider2Dを付加しています。
両方ともIsTrigger、Simulatedにチェックを入れ、Kinematicにしています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

速度を0にする処理が抜けてます。

投稿2022/07/26 06:58

ozwk

総合スコア13521

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

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

hjjgkhl

2022/07/26 10:01 編集

ありがとうございます。 うまくいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問