unity3d 通过AddForce在Unity中跳跃

2wnc66cl  于 2023-04-07  发布在  其他
关注(0)|答案(3)|浏览(186)

我最近开始在Unity中使用物理学,我需要让我的角色跳跃。
我想用AddForce()来做,但我还需要检查字符是否接地。
在代码中我用时间来检查它。
下面是我的代码:

private void JumpByForce() 
{
    time_after_jump = Time.time + 1f;
    Debug.Log(time_after_jump);

    if (Time.time > time_after_jump)
    {
        isJumping = true;
    }
    if (isJumping)
    {
        Player.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 750));
        isJumping = false;
    }
}

private void Start()
{
    Player_pos_x = Player.transform.position.x;
    Player_pos_y = Player.transform.position.y;
    isJumping = true;
    
}

我以为我写了一个正确的代码,但在console是不是出现我想要的.
(It的打印time_after_jump而不添加+ 1f)。
当我第一次点击跳跃按钮时,玩家正确地跳跃。但接下来的时间它不跳。
我最大的问题是-为什么time_after_jump打印没有
+ 1f)?

1mrurvl1

1mrurvl11#

Debug.Log()打印最终值,而不是变量中的表达式。在您的情况下,它打印time_after_jump的最终值。Unity在前一行计算该值,然后打印它(因此打印11而不是打印10+1)。
此外,玩家在第一次之后不跳转的原因是因为Time.time永远不会大于time_after_jump,因为在检查之前向它添加1,因此第一个if永远不会被触发,因此isJumping永远不会为true,除了第一次使用值true初始化它时。

0g0grzrc

0g0grzrc2#

我相信我已经找到了这里的问题。if(Time.time > time_after_jump)而总是返回false
假设Time.time = 2,time_after_jump = Time.time + 1,那么time_after_jump = 3,这意味着它总是更大。
试试这个:

time_after_jump = Time.time;
Debug.Log(time_after_jump);

if ((Time.time + 1f) > time_after_jump)
{
    isJumping = true;
}

虽然,我个人会使用time.deltaTime,创建一个计时器,并在跳转时重置计时器值,以便将isJumping设置为false。
例如:

time_after_jump += Time.deltaTime; 
if(time_after_jump > timeJumping)
{
  isJumping = true;
}

if(isJumping)
{
   //Movement here
   time_after_jump = 0;
   isJumping = false;
}

然而,如果你使用一个输入来获得跳转,这会简单得多。然后当按下跳转时,你会重置计时器。
我在工作,所以这是未经测试的,但我希望你得到的想法。快乐编码。

zed5wv10

zed5wv103#

为了让角色随着时间的推移通过AddForce跳跃,我必须在FixedUpdate方法中检查time_after_jump,如果Time.time将超过time_after_jump,则isJumping将为真,我可以再次跳跃我们的角色。
我使用了这个代码:

private void JumpByForce() 
{
    if (isJumping)
    {
        time_after_jump = Time.time + 0.8f;
        Player.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, 750));
        isJumping = false;
    }
}

private void FixedUpdate()
{
    if (Time.time > time_after_jump)
    {
        isJumping = true;
    }
}

相关问题