バッテラが如く

いつもお世話になっております。

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

この記事の情報は次のバージョンで動作確認しています。

  • MacOS Monterey (12.1)
  • Unity (2021.3.2f1)
  • Unity

    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;
             // 物理運動
        }
    }
    

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