Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3D输入是否注册多个帧?_Unity3d - Fatal编程技术网

Unity3D输入是否注册多个帧?

Unity3D输入是否注册多个帧?,unity3d,Unity3d,我正在Unity中设计一个platformer,并实现了一个功能,其中播放器: 1) 在半空中向下按压,可迅速落在地上 2) 按住时不能跳跃 问题是,第二条规则似乎适用于多个帧——如果我向下轻按,无论是在半空中还是在地面,在那之后的10帧或20帧内我都无法跳跃。我不确定为什么会发生这种情况,因为Update()函数每帧调用一次 下面是Update()代码: void Update(){ if((接地| | |!双跳转)&&Input.GetButtonDown(“跳转”)&&cannotJump

我正在Unity中设计一个platformer,并实现了一个功能,其中播放器:

1) 在半空中向下按压,可迅速落在地上

2) 按住时不能跳跃

问题是,第二条规则似乎适用于多个帧——如果我向下轻按,无论是在半空中还是在地面,在那之后的10帧或20帧内我都无法跳跃。我不确定为什么会发生这种情况,因为Update()函数每帧调用一次

下面是Update()代码:

void Update(){
if((接地| | |!双跳转)&&Input.GetButtonDown(“跳转”)&&cannotJump==false){
跳跃();
}    
//快速下降
如果(接地==错误){
if(Input.GetAxis(“垂直”)<0){
刚体2d.AddForce(新向量2(0,-快速下降));
}
}
//如果保持快速下降,防止跳跃
如果(接地&(Input.GetAxis(“垂直”)<0)){
cannotJump=true;
}
如果(接地&(Input.GetAxis(“垂直”)>=0)){
cannotJump=false;
}
}
游戏可以在这里进行:


如果您有任何帮助,我们将不胜感激。

与其对您是否可以跳转进行两次单独的检查,不如尝试将其分配给您真正想知道的内容。移除最后两个if分支,并尝试将其放置到位:

cannotJump = Input.GetAxis("Vertical") < 0;
cannotJump=Input.GetAxis(“垂直”)<0;

因为你唯一不允许跳跃的时候是当球员压着的时候。“搁浅”检查在这里基本上是无关紧要的,我认为这才是真正伤害你的地方。

我发现这个问题与数字轴的重力有关。当按钮(与操纵杆等模拟源相反)映射到轴时,重力决定释放按钮后轴恢复到空档(0)位置的速度

我设置的默认重力是3;即使在我松开向下按钮后,垂直轴也需要很长时间才能返回到0,因此游戏阻止了我跳跃。我只需将数字轴重力更改为1000,就解决了这个问题


注意:这是使用资产存储中重新布线的输入管理器实现的,但我认为这也适用于Unity自己的输入管理器。

谢谢您的提示。我使用了你的代码,但它并没有完全解决问题,但它让我四处闲逛,我发现了问题所在。
cannotJump = Input.GetAxis("Vertical") < 0;