まずは、オブジェクトの移動のさせ方についてだが、物理挙動を使いたい場合、つまりは、RigidbodyにAddForce
をして移動させる場合は、FixedUpdateを使うことになる
直接オブジェクトの座標(transform.position)を移動させる場合は、1秒でどれだけ動かすかを考えて以下のようなコードを書くことが多い
transofrm.position += velocity * time.deltatime;
ここで今回の話題である、UpdateとFixedUpdateどちらの関数で上記のコードを呼ぶのがいいのか疑問に思ったので調べてみた
FixedUpdateは物理演算用のメソッドでRigidbody
を扱う場合はFixedUpdateを使用するように書いてある
逆に、transform.positionを変更する関数Translate
の解説を見ると、Update内で、Time.deltaTime
を使って更新している
transform.posiitonを時間と速度で動かすのなら、オイラー法
を使っていることになるので、物理演算になるのではないのかと考えもしたが、FixedUpdateは「Unityが」作成した物理挙動を実行したいときに使うメソッドなので、自分で物理挙動を作っているのであれば、Updateでも問題ないという認識にすることにした
2022.1ぐらいからUpdateで物理演算をできるようにする設定が追加されたらしい
FixedUpdateの意味とは。。。
Edit -> Project Settings -> Physics -> Simulation Mode
とりあえず、私が実装する限りは、公式の説明の通りにtranform.positionを動かす場合は、Updateで行うことにした。
Unity2022.1移行であれば、FixedUpdateはもう使わなくてもいいのではないかという気さえしてくる。
複数のUpdateがあるとこんがらがることもあるのでなにか困ることが起こるまでは、シンプルにUpdateを使っていこうと考えている。