【问题标题】:Compensate loss of falling speed when using rb.drag使用 rb.drag 时补偿下降速度的损失
【发布时间】:2020-09-22 08:44:14
【问题描述】:

我正在使用球物理和 FPS 相机制作游戏。我正在使用 rb.drag 和 rb.angularDrag 在某些情况下(例如:在空中、制动/蹲伏时)减慢我的播放器速度。问题是,它的效果太好了,因为它还减慢了我的播放器的下落速度。如何让我的播放器在使用 rb.drag 时正常摔倒?

注意事项:

  • 我已经使用 rb.mass 进行了测试。这使得对玩家的控制变得更糟。
  • 我已经尝试过rb.AddForce(Vector3.up * -rb.drag*gravityForce);,但仍然感觉掉下来。要么我跌得太快以至于几乎无法跳跃,要么玩家仍然以恒定的速度跌落,没有加速。

我的动作代码:

void Start()
    { 
        DistanceToTheGround = GetComponent<Collider>().bounds.extents.y;
    }

    void Update()
    {
        // Input
        moveFwrd = Input.GetAxis("Horizontal");
        moveSide = Input.GetAxis("Vertical");
        // Player Jump
        onGround = Physics.Raycast(transform.position, Vector3.down, DistanceToTheGround + 0.1f);
        if (onGround)
        {
            rb.drag = 0f;
            if (Input.GetKeyDown(jumpKey))
            {
                rb.AddForce(Vector3.up * jumpSpeed, ForceMode.Impulse);
            }
        }
        else
        {
            rb.drag = 2f;
            rb.AddForce(Vector3.up * -rb.drag*6f);
        }

        // Braking
        if (Input.GetKey(brakeKey))
        {
            rb.drag = brakeForce;
        }
    }

    
    void FixedUpdate()
    {
        
        // Player Movement
        movement = cam.transform.right * moveFwrd + cam.transform.forward * moveSide;
        movement.y =0;
        movement = movement.normalized;

        rb.AddForce(movement * speed);
    }

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我不喜欢在这样的场景中使用拖动。您可以重新创建与拖动类似的公式,并将其分别应用于 X 和 Y 轴。在这种情况下,您将刚体中的阻力设置为 0,然后创建自己的阻力变量。你如何实施因情况而异。我倾向于直接操纵速度而不是增加力,这样我就可以更好地控制速度。您还应该只在 FixedUpdate 中执行物理操作,因此您应该将跳转输入保存在更新中并在固定更新中执行。

    【讨论】:

      猜你喜欢
      • 2015-04-15
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2021-06-20
      • 1970-01-01
      • 2018-09-03
      相关资源
      最近更新 更多