Использование AddForce вместе с GetMouseButton(0) в методе FixedUpdate

Поместил такой код в FixedUpdate так как работу с физикой рекомендуется делать не в Update, а в FixedUpdate. Проблема в том, что он срабатывает не корректно. Как это исправить?

void FixedUpdate()
{
    if (Input.GetMouseButtonDown(0))
    {
       //AddForce
    }
}

Ответы (1 шт):

Автор решения: Artsem Gorbatchev

Всё просто

Что бы при нажатии перемещать объект, т.е. чтобы переместить - надо нажать

private Vector3 force;

private void Update()
{
    //force = Vector3.zero 

    if(Input.GetMouseButtonDown(0))
    {
        //force = ...
    }
}

private void FixedUpdate()
{
    //.AddForce(force * Time.fixedDeltaTime) по желанию можно добавить ForceMode.Impulse
}

Если вы хотите чтобы объект перемещался когда кнопка нажата, то переносим force = Vector3.zero в if(Input.GetMouseButtonUp(0))

private void Update()
{
    if(Input.GetMouseButtonDown(0))
    {
        //force = ...
    }

    if (Input.GetMouseButtonUp(0))
    {
        //force = Vector3.zero 
    }
}

Если кратко, то для регистрации нажатий рекомендуется использовать Update, а для работы с физикой FixedUpdate. (Вероятнее всего Input некорректно ведёт себя в FixedUpdate! Подскажите если кто знает почему так происходит?!)

→ Ссылка