2

Unity でシンプルな 2D トップダウン シューターを作ろうとしています。マウスの基本的な動きと追従性はあるのですが、動きに問題があります。

上と右を同時に押すと、予想どおり斜めに移動しますが、上キーを放すと、右に移動したい場所で斜めに移動し続けます。動きを処理するための私のコードは次のとおりです。

private void Update () 
{
    if (Input.GetKey(Up)) {
        Debug.Log("UP");
        Vector3 velUp = rigidbody2D.velocity;
        velUp.y = walkSpeed;
        rigidbody2D.velocity = velUp;
    }
    else if (Input.GetKey(Down)) {
        Vector3 velDown = rigidbody2D.velocity;
        velDown.y = walkSpeed*-1;
        rigidbody2D.velocity = velDown;
    }
    else if (Input.GetKey(Left)) {
        Vector3 velLeft = rigidbody2D.velocity;
        velLeft.x = walkSpeed*-1;
        rigidbody2D.velocity = velLeft;

    }
    else if (Input.GetKey(Right)) {
        Vector3 velRight = rigidbody2D.velocity;
        velRight.x = walkSpeed;
        rigidbody2D.velocity = velRight;
    }
    else {
        Vector3 velStop = rigidbody2D.velocity;
        velStop.x = 0;
        velStop.y = 0;
        rigidbody2D.velocity = velStop;
    }

    //rotation
    Vector3 mousePos = Input.mousePosition;

    Vector3 objectPos = Camera.main.WorldToScreenPoint (transform.position);
    mousePos.x = mousePos.x - objectPos.x;
    mousePos.y = mousePos.y - objectPos.y;

    float angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
    transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
}

私が述べたように動作させるにはどうすればよいですか?このように斜めに動かすと、動きがオフに見えます。

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

0

ベロシティをゼロに強制するのは、キーが押されていないときだけのようです。

Input.GetKeyUpが であることを確認するためにいくつかのチェックを追加し、またはの値をにtrue設定することをお勧めします。おそらく次のようなものです。rigidbody2D.velocityxy0

void Update () {

    if (Input.GetKeyUp(Up) || Input.GetKeyUp(Down)) {
        rigidbody2D.velocity.y = 0;
    }

    if (Input.GetKeyUp(Left) || Input.GetKeyUp(Right)) {
        rigidbody2D.velocity.x = 0;
    }

    ...
于 2014-07-09T23:05:01.750 に答える