Unity FixedUpdate vs Обновление физики при вводе - PullRequest
0 голосов
/ 09 июля 2019

В нескольких ответах указывалось, что Update вызывается один раз в каждом кадре и не должен использоваться для обновления физики, однако его следует использовать для ввода, иначе вы можете пропустить важные события.Проблема, которая возникает сейчас, заключается в том, что если я Update окажу влияние на физический объект?Например, при отпускании мыши некоторые шары начинают двигаться и вращаться.

void Update
{
    if (Input.GetMouseButtonUp(0))
    {
       ball.getComponent<Rigidbody>().AddForce(vector);
       ball.getComponent<Rigidbody>().AddTorque(vector2);
    }
}

1 Ответ

1 голос
/ 09 июля 2019

Для достижения оптимальной производительности вы должны разделить код.

  • Внутри Обновление вы получаете ввод и сохраняете его где-то.
  • Внутри FixedUpdate вы вычисляете физику.

В указанном вами конкретном случае код станет:

bool mouseUp = false;

void Update()
{
    mouseUp = Input.GetMouseButtonUp(0);
}

void FixedUpdate()
{
    if (mouseUp)
    {
       ball.getComponent<Rigidbody>().AddForce(vector);
       ball.getComponent<Rigidbody>().AddTorque(vector2);
       mouseUp = false;
    }
}

-------------
РЕДАКТИРОВАТЬ (после комментариев derHugo и Wouter Vandenputte)

В некоторых случаях FixedUpdate может вызываться несколько раз за кадр. Поэтому безопаснее сбросить значение после его использования. В примере, добавив mouseUp = false.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...