我已经关注了#34; Roll-A-Ball"的Unity教程,并添加了一些扩展。球现在可以跳跃,但每次跳跃都跳得太多次;当我按下SPACE时,我只想要一次球。现在我可以按空格键3次,它会越来越高。
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 jump = new Vector3(0.0f, 150.0f, 0.0f);
rb.AddForce(jump);
}
编辑:
尝试过更改一下代码,但现在我只能跳一次(第一次)
private void textBox_KeyDown(object sender, KeyEventArgs e)
{
if (Input.GetKeyDown(KeyCode.Space) && jump.y <= 0.0f)
{
jump.Set(0.0f, 150f, 0.0f);
rb.AddForce(jump);
}
}
答案 0 :(得分:4)
这可能有点难以理解(因为它不是一步一步的教程,而是一个方案)。
您必须检查球到达地面的时间,检查第一次按下后速度是否达到0或以上。一旦完成,然后将一些bool(此处命名为CanJump
)设置为true
(或者您的语言定义为true)。
还有一些检查要做;一旦CanJump设置为true(因为你的速度现在是>= 0
),还要将一个名为NumJumps
的int变量设置为0.并在每次跳转时递增它。这样,您可以在两次跳跃后将CanJump
设置为false,从而防止球跳跃。
请注意我对Unity 3D一无所知,但我对3D游戏有很多经验(比如虚幻引擎1和UT99 modding)。
答案 1 :(得分:0)
我找到了解决方案。解决方案是添加OnCollisionEnter
,您可以处理玩家与地面碰撞时会发生什么。此外,我添加了一个计数器,当玩家跳起时设置为0,当他与地面碰撞时再次设置为0。
柜台:
if (Input.GetKeyDown(KeyCode.Space))
{
if (JumpCount < 1)
{
Vector3 jump = new Vector3(0.0f, 250.0f, 0.0f);
rb.AddForce(jump);
JumpCount++;
}
}
此处的计数器设为0:
void OnCollisionEnter(Collision other)
{
JumpCount = 0;
}