我正在尝试降低我的玩家在跳跃顶点的重力并在下降的过程中增加它(2D 游戏)

问题描述 投票:0回答:1

我的玩家的重力在他们跳跃的顶点处减小,但在那之后它并没有改变。我希望重力在顶点之后增加一定的时间量。

如果我在跳跃以及我的 y 速度是否为负值,我将其设置为检测我跳跃的顶点。然后我设置了几个布尔值以在增加的重力和减少的重力之间切换,我使用 if 语句进行切换。我有 if 语句来切换减少和增加重力布尔值,它引用我作为计数器使用的浮点数。当你不跳跃时,计数器重置为 0.2,在确定跳跃顶点的 if 语句中,我有“gravityCounter -= Time.deltaTime”在你到达所述顶点时对其进行倒计时。

无论出于何种原因,计数器似乎从未真正下降过;有人知道怎么了吗?

这是脚本:

{

public bool increaseGravity = false;
public bool decreaseGravity = false;
public float gravityCounter;
public float gravity = 0.2f;
public float gravityModifierDown = 2.75f;
public float gravityModifierUp = 4.25f;
public float normalGravity = 3.5f;
bool highPoint = false;

[SerializeField] private Rigidbody2D rb;

private void Update()
{   
    

    if (rb.velocity.y < 0 && this.highPoint == false && gameObject.GetComponent<PlayerMovement>().isJumping == true)
    {
        
        this.highPoint = true;
        Debug.Log("highPoint");
        decreaseGravity = true;
        gravityCounter -= Time.deltaTime;
    }
    else
    {
        gravityCounter = 0.2f;
    }

    if (rb.velocity.y > 0f || this.gameObject.GetComponent<PlayerMovement>().IsGrounded())
    {
        this.highPoint = false;
    }

    if (gravityCounter < 0f)
    {
        Debug.Log("Gravity Counter Empty");
        decreaseGravity = false;
        increaseGravity = true;
    }

    if (decreaseGravity == true)
    {
        this.gameObject.GetComponent<Rigidbody2D>().gravityScale = gravityModifierDown;
    }

    if (increaseGravity == true)
    {
        this.gameObject.GetComponent<Rigidbody2D>().gravityScale = gravityModifierUp;
    }

    if (this.gameObject.GetComponent<PlayerMovement>().IsGrounded() || this.gameObject.GetComponent<PlayerMovement>().IsWalled())
    {
        increaseGravity = false;
        decreaseGravity = false;
        this.gameObject.GetComponent<Rigidbody2D>().gravityScale = normalGravity;
        
    }

}

}

c# unity3d 2d physics
1个回答
0
投票

gravityCounter 不会降低,因为这个语句只发生一次:

gravityCounter -= Time.deltaTime;

该语句块是在条件检查

highpoint
是否等于 true 之后,但是您立即将
highpoint
设置为 false。因此,它只会发生在一个更新调用中,之后的每个调用都会到达 else 块并将
gravityCounter
设置回
0.2f

也许把

gravityCounter -=
行放在
if (decreaseGravity == true)
之后(顺便说一句,你不需要“== true”)。

此外,与具体问题无关,但我认为像重力这样的物理相关的东西应该在

FixedUpdate

© www.soinside.com 2019 - 2024. All rights reserved.