【问题标题】:How to apply friction to this physics model?如何将摩擦力应用于这个物理模型?
【发布时间】:2012-05-13 12:29:29
【问题描述】:

我正在尝试制作我的小引擎,以便制作像这样one 的桌上冰球滑块游戏:

然后,我无法很好地移动冰球,因为我使用速度法线来使加速度与速度矢量相反:

        velocity = ((Vector2) (initMousePosition - Input.mousePosition)).normalized*1.42f*Mathf.Min(1f,((Vector2) (initMousePosition - Input.mousePosition)).magnitude/Screen.height);
        acceleration = - velocity.normalized;
 ...

这是我们有用的变量来解决我的问题:

Board.COEFFICIENTE_OF_FRICTION = 0.1f;

公共 Vector2 位置;

公共 Vector2 速度;

公共 Vector2 加速;

代码:

private static void Move()
{
    foreach(BoardObject obj in objects)
    {
        if (obj is Puck)
        {
            auxPuck = (Puck) obj;
            if (auxPuck.velocity.magnitude > 0f)
            {
                auxPuck.acceleration += (-auxPuck.acceleration * 9.8f*auxPuck.mass*Board.COEFFICIENTE_OF_FRICTION*Time.deltaTime);
                auxPuck.velocity +=  auxPuck.acceleration * Time.deltaTime;
                auxPuck.position += auxPuck.velocity * Time.deltaTime;

                if (VectorsChangeMagnitudeSign(auxPuck.velocity,auxPuck.velocity-auxPuck.acceleration*Time.deltaTime))
                {
                    auxPuck.acceleration = Vector2.zero;
                    auxPuck.velocity = Vector2.zero;
                }
            }
        }
    }
}

也许我必须使用像 float 这样的加速度,或者从另一个不是速度归一化的向量开始。我的问题是当速度变大时,它似乎有一个奇怪的剩余速度,使它在最后不断移动。

知道我必须如何做到这一点才能顺利运行吗?

【问题讨论】:

    标签: c# unity3d game-physics


    【解决方案1】:

    抱歉,我发现了问题。我告诉你了 。我开始使用归一化矢量,当我扔冰球时,问题就出现了,因为冰球相对于墙壁改变了方向,然后加速休息减少了摩擦力,导致了恒速。

    抱歉耽误您的时间,但还是谢谢您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-13
      相关资源
      最近更新 更多