unity3d 更新无法正确检测我的跳转输入

2w3kk1z5  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(122)

我遵循一些指南,从我所看到的使用更新功能是一件好事的跳转行动,但当我这样做的更新发送我到一个不同的位置。

跳转相关函数:
void Update(){
   if(dead == false){
      if(Input.GetKeyDown(KeyCode.Space)){
         if(OnGround == true){
            r.velocity = new Vector2(r.velocity.x, jumpForce * time.deltaTime);
         }
      }
   }
}

从互联网上搜索我发现了以下内容,但他们没有帮助我这么多option1option2
主要是它把我移到不同的位置或者把我跳得太高或太低,从来没有一个好的适当的跳跃,我真的不知道该怎么做,有什么想法吗?

ao218c7q

ao218c7q1#

直接指定速度时不应使用Time.deltaTimeTime.deltaTime的值取决于帧速率,帧速率可能会抖动,抖动会继承到跳跃中,因此可以获得准随机速度和跳跃高度。

if(!dead && Input.GetKeyDown(KeyCode.Space) && OnGround){
  r.velocity = new Vector2(r.velocity.x, jumpForce);
}

AddForce函数通常用于跳转,从技术上讲,这是正确的方法,但我知道很多人更喜欢您的方法,无论如何,我将在这里提供它作为参考。

if(!dead && Input.GetKeyDown(KeyCode.Space) && OnGround){
  r.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
}
b4lqfgs4

b4lqfgs42#

虽然你的代码是正确的,我建议使用Rigidbody.AddForce(Vector3 force);,或者如果你使用刚体2d Rigidbody2D.AddForce(Vector2 force);而不是r.velocity=...。为了更容易调试-你可以为力创建一个公共变量,并在播放模式下调整它,直到你得到满意的结果。

相关问题