當我向左或向右移動時, rb.velocity.y 變為奇怪的數字。我怎樣才能擺脫這個?我想在玩家跳躍時改變重力,由于這個錯誤,即使玩家左右移動它也會改變。
void FixedUpdate(){
isGrounded = Physics2D.BoxCast(coll.bounds.center,coll.bounds.size, 0, Vector2.down, .1f,WhatIsGround);
rb.velocity = new Vector2(moveInput * speed, rb.velocity.y);
if(jumped){
rb.AddForce(Vector2.up * jump, ForceMode2D.Impulse);
jumped = false;
}
if(rb.velocity.y < 0){
rb.gravityScale = fallMultiplier;
}
else if(rb.velocity.y > 0 && !(Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.UpArrow))){
rb.gravityScale = lowJumpMultiplier;
}
else{
rb.gravityScale = 1f;
}
}
uj5u.com熱心網友回復:
浮點計算和 Unity 物理都不精確。當您的剛體移動時,重力試圖將其推入地面對撞機,而碰撞檢測則將其向上推。這導致速度的微小振蕩。
在使用浮點值時,您永遠不應該使用直接比較。在這種情況下,您需要一個小的閾值來可靠地檢測 Y 速度方向:
if(rb.velocity.y < -.1f)
{
rb.gravityScale = fallMultiplier;
}
else if (rb.velocity.y > .1f && !(Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.UpArrow)))
{
rb.gravityScale = lowJumpMultiplier;
}
else
{
rb.gravityScale = 1f;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/522426.html
標籤:C#unity3d
上一篇:如何統一增加主玩家的大小
