Unity2Dでアクションゲームを作っていて、Vector2とAddForceを使ってジャンプをさせていました。
ですが、ブロックにぶつかっても進行方向(右なら右、左なら左)に進ませながら、ジャンプを連続ですると、仕様の5倍近いジャンプをするので、それが無いように今まで治していましたが解決方法が分からず詰んだという事でここに投稿させていただきました。
因みにジャンプをするかどうかのプロセスは、言葉で表すとこんな感じです。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
①、ボタン入力された時、ジャンプの回数が0なら②へ。
↓
②Vector2で入力先を取ってから、Rigidbody2DでAddForceでプレイヤーに力を加える。
ここから地面に着くまでもう一度ジャンプはできない。
↓
③地面につくと、ジャンプ回数が0になって、もう一度ジャンプができる。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実際のプログラムがこちらになります。(尚、当たり判定の関係上、「プレイヤーの本体管理」と「ジャンプ専用の当たり判定管理」とで分けています)
プレイヤー側のスクリプト
↓
if (Input.GetButtonDown("A_Button")) { if (!JumpCommand) { if (JumpCount < 1) { AS.PlayOneShot(JumpSound); Vector2 JumpForce = new Vector2(0.0f, Player_Speed * Jump_Speed); rb2d.AddForce(JumpForce); JumpCount++; } JumpCommand = true; } }
当たり判定側のスクリプト
↓
private void OnTriggerStay2D(Collider2D collision) { if (collision.gameObject.CompareTag("GroundBlock") || collision.gameObject.CompareTag("WhiteBlock") || collision.gameObject.CompareTag("RedBlock") || collision.gameObject.CompareTag("CloneBlock")) { GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().TouchBlock = true; if (!GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().JumpCommand) { GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerControllerScript>().JumpCount = 0; } } }
証拠画像も送りたかったのですが、画像の張り方が分からなかったので、言葉足らずだったかもしれません。もしそうでしたらすみません。
何方か分かる方はどうか解決策を教えてください。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー