跳跃和记忆跳跃时间的问题



我正在努力让我的角色在任何时候都能跳跃,或者如果他在空中,只有当他有额外的跳跃并且已经过了x段时间时才能跳跃。目前我有这样的:´

void Jump()
{
jumpTime -= Time.fixedDeltaTime;
if ((jumpRemember > 0) && ((groundRemember > 0) || ((jumps>0) && (jumpTime <= 0))))
{
jumpRemember = 0;
groundRemember = 0;
rb.velocity = new Vector2(rb.velocity.x, jumpForce);
jumps--;
jumpTime = timeSinceLastJump;
}
}

(跳跃记忆和地面记忆是检查我是否按下了跳跃按钮或在最后0.1秒内接地(

但当他被接地,撞上屋顶,然后被送回地面时,不管怎样,时间过去了,他就不能跳了,尽管我使用了"OR"运算符。

尝试使用Debug.Log(变量(检查变量的状态。

"当他被停飞,撞上屋顶,然后被送回地面"——这会改变什么变量?

当角色与屋顶碰撞时,这些变量中的任何一个是否发生了意外更改?

我会在评论中留下这一点,但你需要声誉来解锁这个网站的功能。

如何处理问题的示例。

const int MAX_JUMPS = 2;
const FLOAT JUMP_TIMER = 1;
const float JUMP_FORCE = 100;
int jumps = 2;
float nextJump = 0;
bool grounded = true;

void Update() 
{
if (Input.GetKeyDown(KeyCode.Space)) 
TryJump();
}
void TryJump() 
{
if (grounded || (jumps > 0 && nextJump < Time.time)) 
{
Jump();
}
}
void Jump() 
{
rb.velocity = new Vector2(rb.velocity.x, JUMP_FORCE);
jumps--;
nextJump = Time.time + JUMP_TIMER;
}
void Grounded() 
{
grounded = true;
jumps = MAX_JUMPS;
}
void Airborne()
{
grounded = false;
}
void OnCollisionEnter(Collision col) 
{
if (col.tag == "Floor")
Grounded();
}
void OnCollisionExit(Collision col) 
{
if (col.tag == "Floor")
Airborne();
}

我想你的括号放错地方了。你想前两个都是真的还是后两个都不是?

if ((jumpRemember > 0) && ((groundRemember > 0) || ((jumps>0) && (jumpTime <= 0))))

应该是吗?

if ((jumpRemember > 0 && groundRemember > 0) || (jumps>0 && jumpTime <= 0))

groundRemember前面的第二个括号导致它和or语句右边的两个括号分组。你需要记住所有的时间,然后地面记住>0或其他两个都是真的。这听起来不像是你想要的。是吗?

最新更新