C# 在被推后移动时给玩家一些摩擦力

C# 在被推后移动时给玩家一些摩擦力,c#,unity3d,physics,C#,Unity3d,Physics,我真的不知道该怎么说,但让我们假设你是一个球,正在弹跳和移动。它是一个平坦的表面,所以一切都运转良好 现在引入一些45度的斜坡。你跌倒在一个直线下降,反弹离开它。此时,你可以立即向后移动,无论你撞到它的速度有多快,或者你的移动角度或速度有多大,因为它是在一个角度,所以推的动量应该更大。有点像一个小的逐渐的动量,直到你达到0的速度,然后你可以正常移动 if (playerLeft) { float xVelocity = (playerBody.velocity.x

我真的不知道该怎么说,但让我们假设你是一个球,正在弹跳和移动。它是一个平坦的表面,所以一切都运转良好

现在引入一些45度的斜坡。你跌倒在一个直线下降,反弹离开它。此时,你可以立即向后移动,无论你撞到它的速度有多快,或者你的移动角度或速度有多大,因为它是在一个角度,所以推的动量应该更大。有点像一个小的逐渐的动量,直到你达到0的速度,然后你可以正常移动

    if (playerLeft)
    {
        float xVelocity = (playerBody.velocity.x > 0) ? playerBody.velocity.x - playerSpeed : -playerSpeed;
        playerBody.velocity = new Vector3(xVelocity, playerBody.velocity.y, 0);
    }

    if (playerRight)
    {
        float xVelocity = (playerBody.velocity.x < 0) ? playerBody.velocity.x + playerSpeed : playerSpeed;
        playerBody.velocity = new Vector3(xVelocity, playerBody.velocity.y, 0);
    }
if(播放器左侧)
{
float xVelocity=(playerBody.velocity.x>0)?playerBody.velocity.x-playerSpeed:-playerSpeed;
playerBody.velocity=新矢量3(xVelocity,playerBody.velocity.y,0);
}
如果(播放右侧)
{
float xVelocity=(playerBody.velocity.x<0)?playerBody.velocity.x+playerSpeed:playerSpeed;
playerBody.velocity=新矢量3(xVelocity,playerBody.velocity.y,0);
}
最初,我只为每一条线设置了一条线,在这里我将x速度设置为等于玩家速度,不管速度是-1还是-50。你可以想象这看起来是多么不现实

我试着增加速度,这就是我上面所做的。但因为它的最小值只有0以下6左右。它将在2或3帧内达到其最大速度,但这不够缓慢。

这是通过以下步骤完成的

1。首先,通过转到资产-->创建-->物理材质来创建物理材质

2。将物理材质拖动到对象碰撞器的材质窗中

3。以下是选择物理材质时的外观:

您可以在编辑器中选择物理材质并修改其设置,也可以通过脚本:

SphereCollider yourCollider = ...;
yourCollider.material.dynamicFriction = 0.6f;
yourCollider.material.staticFriction = 0.6f;
yourCollider.material.bounciness = 0.0f;

这允许您在运行时修改对象的反弹度和摩擦力。我建议您观看视频以了解基本设置。

谢谢,我会尝试一下,但我是否应该保持代码不变?代码不会覆盖这个吗?由于我明确设置了速度,您可能希望用
playerBody.AddForce
替换
playerBody.velocity
,然后使用我在回答中提供的物理材料示例更改摩擦力。我建议你读一下这本书,看看价值的含义。此外,我建议您在游戏运行时通过编辑器进行实验,并得出所需的正确值。在你的代码中告诉我们这些值是的,我刚刚看了那个视频,在我的例子中它不起作用,因为我在代码中操纵它的速度。我也不认为力量会起作用,因为在我的例子中,球员以恒定的速度移动,增加力量就像爆炸一样,射门。我只是不想要一个恒定的速度,如果它的速度低于0时,试图向右移动,反之亦然,为左我从来没有说过它不会与速度。我建议使用
AddForce
作为替代方案,但在您的场景中,这并不合适,所以请使用velocity。在此之前,我强烈建议您使用。我认为这比速度更适合你的情况。现在,把它和物理材料结合起来。