我正在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/
任何帮助都将不胜感激。
答案 0 :(得分:1)
不要对是否可以跳转进行两次单独检查,而是尝试将其分配给您真正想知道的内容。删除最后两个if-branches并尝试将其放在原位:
cannotJump = Input.GetAxis("Vertical") < 0;
因为你唯一想要禁止跳跃的时间是玩家按住的时间。 &#34;接地&#34;检查在这里几乎无关紧要,我认为这实际上是在伤害你。
答案 1 :(得分:1)
我发现这个问题与数字轴的引力有关。当一个按钮(与操纵杆等模拟源相对)映射到一个轴时,重力决定了在释放按钮后轴快速回到中性(0)位置的速度。
我的设置中的默认重力为3;即使在我释放向下按钮后,垂直轴也需要很长时间才能返回到0,因此游戏阻止了我跳跃。我通过简单地将数字轴重力改为1000来解决问题。
注意:这是资产商店的Rewired输入管理器,但我认为这也适用于Unity自己的输入管理器。