【问题标题】:Jump at fixed height on single touch : Unity 2D单点触摸在固定高度跳跃:Unity 2D
【发布时间】:2019-01-09 17:03:48
【问题描述】:

我正在尝试制作堆栈跳跃游戏的副本以供学习。我试图让我的玩家跳到固定高度,但使用下面的代码,它总是跳到不同的高度。如果我触摸很长时间,它会跳得很高,如果我立即触摸并释放释放,那么它会跳得很低。我希望我的球员在长触球或短触球时都能跳出恒定的高度。我刚刚开始学习团结。请帮忙!

这是我的代码 -

 Touch touch;
 if (Input.touchCount > 0)
 {
     touch = Input.GetTouch(0);
     if ((touch.phase == TouchPhase.Began) && isGrounded)
     {
          //rb.velocity = Vector2.up * jumpForce;
         rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
         isGrounded = false;
     }
     if (touch.phase == TouchPhase.Ended)
     {
         //rb.velocity = Vector2.down * jumpForce;
         rb.AddForce(Vector2.down * jumpForce, ForceMode2D.Impulse);
         isGrounded = true;
     }
   }

【问题讨论】:

  • 这段代码是否在您的Update() 方法中?如果是,它会检查每一帧的触摸并完全按照你说的做。将您的GetTouch(0) 签入Update() 方法并将您的跳转逻辑移至协程。
  • @Eliasar 此代码在 FixedUpdate() 方法中。我从前两天刚开始学习团结。我不确定协程是什么。我会努力落实你的建议。谢谢你! :)
  • 您在触摸结束时设置 isGrounded = true。您应该使用地板对撞机来执行此操作。因为当你活着的时候,你的手指在不接触地板的情况下就变成了真实的。这是个问题。
  • moje_mast_ram 是对的。您应该使用物理来确定角色何时使用地板对撞机和重力跌倒。如果您在跳跃的每一帧都需要额外的处理,您可以使用协程。

标签: unity3d


【解决方案1】:

我在学习 Unity 时完成了完全相同的任务。所以你要做的就是将组件 Rigitbody2D 添加到你的游戏对象中

private Rigidbody2D body;
private float jumpForce = 12.0f;


void Start()
{
   body = GetComponent<Rigidbody2D>();

}

void Update()
{
   bool grounded = false;
   // set to true when your gameObject is on the ground
   // Assume Space button is for jump
   if(grounded && Input.GetKeyDown(KeyCode.Space))
   {
       body.AddForce(Vector2.up*jumpForce, ForceMode2D.Impulse);
   } 
}

所以这个想法是你在地面上时跳跃(你可以使用 Physics2D.OverlapArea 来检测与地面的碰撞),你可以控制你想跳多高,你可以使用 AddForce 做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多