0

Flappy Bird と同じ仕組みを持つ 2D 形式を使用して、Unity でゲームを作成しています。しかし、思い通りの動きにはなりません。

主な問題は、マウス ボタンを押すと、ボタンを離すまで停止しないことです。マウスボタンを押したまま離さないと鳥が落ちるように、ワンクリックで1回の動きが必要です。なぜなら、一度だけバウンドするからです。

これが動作コードです。この問題を修正する方法を教えてください。ムーブメントで使用されていないコードの一部をスキップしました。

float flapSpeed = 25f;
float forwardSpeed = 0.9f;

void Update () {
      if  (Input.GetMouseButton(0)) { 
          didFlap = true;
      }
}

void FixedUpdate () {
// Movement
    GetComponent<Rigidbody2D>().AddForce(Vector2.right * forwardSpeed);
    if (didFlap) {
         GetComponent<Rigidbody2D>().AddForce(Vector2.up * flapSpeed);
         didFlap = false;
    }
}
4

5 に答える 5

0

Flappy Bird で同じメカニズムを使用する場合は、力を適用する代わりに を使用する必要がありますrigitbody.velocity。これは、鳥が上昇、下降、または停止しているかどうかに関係なく、常に同じ初期速度で飛行するためです。

private void HandleMouse ()
{   
    if (Input.GetMouseButtonDown(0)) {
        rigidbody.velocity = new Vector3 (rigidbody.velocity.x, velocityUp, 0f);
    }
}
于 2015-08-06T14:44:17.523 に答える
0

フレームごとに Input.GetMouseButton(0) をチェックしています。この関数は、プレイヤーが button_0 を長押しすると true を返します。あなたが望むのは、一度起動する Input.GetMouseButtonDown(0) をチェックすることです。

ところで、あなたのコードについて 2 つのアドバイスがあります。

  1. Input.GetMouseButtonDown() の戻り値をローカル変数に格納して、フレームごとに 1 回だけチェックするようにします (各更新ループの繰り返し)。

  2. Start() 関数で GetComponent<>() を使用して、
    グローバル変数に格納してみてください。
    この関数は、フレームごとに呼び出されるコスト効率が悪いためです。

于 2018-07-30T17:19:44.830 に答える