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
C# 使用rb阻力时,补偿下降速度损失_C#_Unity3d - Fatal编程技术网

C# 使用rb阻力时,补偿下降速度损失

C# 使用rb阻力时,补偿下降速度损失,c#,unity3d,C#,Unity3d,我正在用球物理和FPS摄像机做一个游戏。我使用rb.drag和rb.angularrag在某些情况下(例如:在空中、刹车/蹲下时)减慢我的球员速度。问题是,它工作得太好了,同时也减慢了我的球员的下降速度。如何使我的播放器在使用rb.drag时正常下落 注: 我已经用rb.mass进行了测试。这使得控制球员变得更糟 我尝试了rb.AddForce(Vector3.up*-rb.drag*gravityForce),但仍感觉摔倒。要么我跌得太快,几乎跳不起来,要么球员仍然以恒定的速度下落,没有加速

我正在用球物理和FPS摄像机做一个游戏。我使用rb.drag和rb.angularrag在某些情况下(例如:在空中、刹车/蹲下时)减慢我的球员速度。问题是,它工作得太好了,同时也减慢了我的球员的下降速度。如何使我的播放器在使用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);
    }
void Start()
{ 
距离地面=GetComponent().bounds.extents.y;
}
无效更新()
{
//输入
moveFwrd=Input.GetAxis(“水平”);
moveSide=Input.GetAxis(“垂直”);
//运动员跳跃
onGround=物理.光线投射(变换.位置,矢量3.向下,与地面的距离+0.1f);
如果(每轮)
{
rb.drag=0f;
if(输入。GetKeyDown(跳键))
{
rb.AddForce(矢量3.up*跳跃速度、力模式、脉冲);
}
}
其他的
{
rb.drag=2f;
rb.AddForce(矢量3.up*-rb.drag*6f);
}
//刹车
if(输入.获取键(制动键))
{
rb.阻力=制动力;
}
}
void FixedUpdate()
{
//球员运动
移动=cam.transform.right*moveFwrd+cam.transform.forward*moveSide;
运动y=0;
运动=运动。标准化;
rb.AddForce(移动*速度);
}

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