【问题标题】:Give the player some friction when moving after being pushed被推后移动时给玩家一些摩擦力
【发布时间】:2018-06-30 12:37:53
【问题描述】:

不太确定如何表达,但假设你是一个球,正在四处弹跳和移动。它是一个平坦的表面,所以一切都很好。

现在介绍一些 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);
    }

最初我只有 1 行,我将 x 速度设置为等于玩家速度,无论速度是 -1 还是 -50。你可以想象那看起来多么不切实际。

我尝试添加上面所做的速度。但是因为它的最小值只有 6 低于 0。它会在 2 或 3 帧内达到它的最大速度,这还不够渐进。

【问题讨论】:

    标签: c# unity3d physics


    【解决方案1】:

    这是通过Physic Material 完成的。

    1。首先,通过转到 Assets ---> Create ---> Physic Material 创建一个物理材质。

    2.将物理材质拖到对象对撞机的材质槽中。

    3.下面是物理材质被选中时的样子:

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

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

    这允许您在运行时修改对象的弹性和摩擦力。建议大家观看this视频了解基本设置。

    【讨论】:

    • 谢谢我试试这个,但我应该保持代码不变吗?代码不会覆盖这个吗?因为我明确设置了速度
    • 您可能想用playerBody.AddForce 替换playerBody.velocity,然后使用我在回答中提供的物理材料示例来改变摩擦。我建议您阅读doc 以了解值的含义。另外,我建议您在游戏通过编辑器运行时进行试验,并提出您需要的适当值。在您的代码中使用这些值
    • 是的,我刚刚看了那个视频,它在我的情况下不起作用,因为我在代码中操纵它的速度。我认为力量也不会起作用,因为在我的示例中,玩家以不断的速度移动并增加力量就像爆炸一样,射门。如果尝试向右移动时速度低于 0,我只是不想要一个恒定的速度,反之亦然
    • 我从未说过它不适用于速度。我建议 AddForce 作为替代方案,但由于在您的场景中这不合适,请使用速度。在你这样做之前,我强烈建议你使用ConstantForce。我认为这比速度更适合您的情况。现在,将它与物理材料结合起来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2023-02-25
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多