团结:玩家离墙太近“抵抗”重力[视频]

时间:2019-02-06 13:07:25

标签: unity3d

我有一个小平台游戏,玩家可以在其中跳跃。跳动效果很好,根据我设置的重力,播放器在空中跳得很高,然后掉下来。但是,一旦玩家越过可以跌倒的边缘,他的身体似乎就会陷入僵局。他没有跌倒,而是慢慢地下降,就好像他是用树叶做成的一样。

我发现,一旦玩家撞到侧墙,也会发生这种情况。看起来,一旦您越过边缘,玩家就会碰触墙的侧面一秒钟,这会破坏其物理性能。

我在这里记录了这个问题:

https://youtu.be/CE-W4wmMqcA

这些是我的播放器设置:

enter image description here

我还尝试了在墙壁和blayer上添加2D物理,并将所有内容都设置为0。这确实改变了效果,但还远远不能解决...

此外,我的固定更新是我跳到哪里(从更新中捕获布尔值,以固定的方式进行物理处理:)

void FixedUpdate()
{
    currentPlayerSpeed = rb.velocity.x;

    if (moveLeft)
    {
        rb.AddForce((Vector2.left * movementSpeed * Time.deltaTime) - rb.velocity, ForceMode2D.Force);

    }
    if (moveRight)
    {
        rb.AddForce((Vector2.right * movementSpeed * Time.deltaTime) - rb.velocity, ForceMode2D.Force);
    }

    if (jump)
    {

        if (isGrounded)
        {
            isGrounded = false;

            rb.AddForce(Vector2.up * (jumpHeight * counterForJumpHeight) * Time.deltaTime, ForceMode2D.Impulse);
            jump = false;

            anim.SetBool("bool_anim_isJumping", true);
        }

        if (timer != null)
            timer.Stop();

        counterForJumpHeight = jumpMulitMin;

        jumpAlreadCharging = false;

    }

    if (!moveLeft && !moveRight) // if no movement input is happening
    {
        if (isGrounded)
        {
            StopVelocity();
        }

    }
}

1 个答案:

答案 0 :(得分:1)

好吧,我想我想出了当您同时丢弃moveLeftmoveRight变量都是错误的情况时,因此您正在调用StopVelocity并执行if语句的情况。

if (!moveLeft && !moveRight) // if no movement input is happening
{
    if (isGrounded)
    {
        StopVelocity();
    }

}

这会导致这种奇怪的行为。由于您没有跳而只摔倒isGrounded也是正确的:)