Unity3D输入注册多个帧?

时间:2014-12-14 19:50:07

标签: unity3d

我正在Unity中设计一个平台游戏,我实现了一个播放器的功能:

1)通过在空中按下

可以迅速坠落到地面

2)按住时无法跳跃

问题在于第二条规则似乎适用于多个框架 - 如果我轻拍,无论是在半空中还是接地,我都无法在此之后跳过10或20帧。我不确定为什么会发生这种情况,因为每帧调用一次Update()函数。

这是Update()代码:

 void Update() {
     if((grounded || !doubleJump) && Input.GetButtonDown("Jump") && cannotJump == false) {
         Jump();
     }    

     //Fast Fall
     if (grounded == false) {
         if (Input.GetAxis("Vertical") < 0) {
             rigidbody2D.AddForce(new Vector2(0, -fastFall));
         }
     }

     //Prevent Jump if Fast Fall is held
     if (grounded && (Input.GetAxis("Vertical") < 0)){ 
         cannotJump = true;
     }

     if (grounded && (Input.GetAxis("Vertical") >= 0)) { 
         cannotJump = false;
     }

 }

游戏可以在这里播放:http://eternicity.net/gamedev/test2/

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

不要对是否可以跳转进行两次单独检查,而是尝试将其分配给您真正想知道的内容。删除最后两个if-branches并尝试将其放在原位:

cannotJump = Input.GetAxis("Vertical") < 0;

因为你唯一想要禁止跳跃的时间是玩家按住的时间。 &#34;接地&#34;检查在这里几乎无关紧要,我认为这实际上是在伤害你。

答案 1 :(得分:1)

我发现这个问题与数字轴的引力有关。当一个按钮(与操纵杆等模拟源相对)映射到一个轴时,重力决定了在释放按钮后轴快速回到中性(0)位置的速度。

我的设置中的默认重力为3;即使在我释放向下按钮后,垂直轴也需要很长时间才能返回到0,因此游戏阻止了我跳跃。我通过简单地将数字轴重力改为1000来解决问题。

注意:这是资产商店的Rewired输入管理器,但我认为这也适用于Unity自己的输入管理器。