如何对这个物理模型应用摩擦力?

时间:2012-05-13 12:29:29

标签: c# unity3d game-physics

我正在尝试制作我的小型引擎,以制作像这样one的桌面Puck滑块游戏:

然后,我在移动冰球方面遇到了问题,因为我使用的是速度法,使得加速度与速度矢量相反:

        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职位;

public Vector2 velocity;

公共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;
                }
            }
        }
    }
}

也许我必须像浮动一样使用加速度,或者从另一个不是速度归一化的向量开始。我的问题出现在速度越来越高的时候,它似乎有一个奇怪的剩余速度,使它在最后不断移动。

我怎么知道如何做到这一点的好方法呢?

1 个答案:

答案 0 :(得分:0)

抱歉,我发现了这个问题。我告诉你了 。我开始使用标准化矢量,当我抛出冰球时,问题就出现了因为冰球改变方向对墙壁的方向,然后加速度休息正在减小摩擦力,导致恒定速度。

对不起您的时间,无论如何,谢谢。