バッテラが如く

プログラミングしましょ!

【Unity】FixedUpdateでInput.GetKeyDown使うのはよくない件について

Unity (2021.3.2f1

FixedUpdateでInputは複数回反応する

キーボードやマウスの検知でInputクラスを使うことがありますよね。

FixedUpdate内でInputを使うと1回の押下で複数回処理が呼びだされることがおきます。

private void FixedUpdate()
{
    if (Input.GetKeyDown(KeyCode.Alpha1))
    {
            // 処理
    }
}

これはUpdateFixedUpdateの更新間隔が異なっていて、
InputUpdateに合わせたクラスであるためFixedUpdateだとうまく噛み合いません。

しかし、

この処理がRigidbodyなどの物理系の処理を呼び出すと、物理運動が壊れます。

こちらが立てればあちらが立たず。ぐぬぬ。

押下処理と物理処理を同時にやらないようにするには?

前述の問題を整理した上で両立させるにはどうしたらいいのか。

Updateでフラグを立ててFixedUpdateで物理処理するのがベターといった感じでしょうかね。

private void Update()
{
    if (Input.GetKeyDown(KeyCode.Alpha1))
    {
            flg = true;
    }
}

 private void FixedUpdate()
{
    if (flg) {
          flg = false;
         // 物理運動
    }
}

冗長化しますが、これしかないのかなー