前提
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にしています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/26 10:01 編集