1

2D エンジンを使用して Unity でプラットフォーマーを開発しています。BoxCollider2D と RigidBody を持つプレイヤー キャラクターと、BoxCollider を持つ多数の「壁」があります。

ここで、プレーヤーを移動するためのスクリプトを別のプロジェクトからコピーし、いくつかの変更を加えました。動きに関係する部分は次のとおりです。

public void FixedUpdate()
    {
        physVel = Vector2.zero;

        // move left
        if(Input.GetKey(KeyCode.LeftArrow))
        {
            physVel.x = -runVel;
        }

        // move right
        if(Input.GetKey(KeyCode.RightArrow))
        {
            physVel.x = runVel;
        }

        // jump
        if(Input.GetKey(KeyCode.UpArrow))
        {
            if(jumps < maxJumps)
            {
                jumps += 1;
                if(jumps == 1)
                {
                    _rigidbody.velocity = new Vector2(physVel.x, jumpVel);
                }
            }
        }

        //Apply gravity

        _rigidbody.AddForce(-Vector3.up * fallVel);


        // actually move the player
        _rigidbody.velocity = new Vector2(physVel.x, _rigidbody.velocity.y);
    }

これで問題なく動作します。

プレイヤーが壁に飛び込むと問題が発生します。ジャンプした後、方向ボタンを壁に向かって押し続けると、彼は空中に浮かびます。衝突のように、両方の軸の動きをゼロに減らしているように見えます。方向を離せば普通に落ちる。他の軸の衝突は正常に機能します。頭を打ったり、問題なく歩けます。

明らかな何かが欠けていますか?

4

1 に答える 1