[Unity 雑記] UpdateとFixedUpdateどちらでtrasform.positionを動かすのがいいのか

前提

まずは、オブジェクトの移動のさせ方についてだが、物理挙動を使いたい場合、つまりは、RigidbodyにAddForceをして移動させる場合は、FixedUpdateを使うことになる

直接オブジェクトの座標(transform.position)を移動させる場合は、1秒でどれだけ動かすかを考えて以下のようなコードを書くことが多い

C#
transofrm.position += velocity * time.deltatime;

ここで今回の話題である、UpdateFixedUpdateどちらの関数で上記のコードを呼ぶのがいいのか疑問に思ったので調べてみた

公式の説明

FixedUpdateは物理演算用のメソッドでRigidbodyを扱う場合はFixedUpdateを使用するように書いてある

逆に、transform.positionを変更する関数Translateの解説を見ると、Update内で、Time.deltaTimeを使って更新している

屁理屈

transform.posiitonを時間と速度で動かすのなら、オイラー法を使っていることになるので、物理演算になるのではないのかと考えもしたが、FixedUpdateは「Unityが」作成した物理挙動を実行したいときに使うメソッドなので、自分で物理挙動を作っているのであれば、Updateでも問題ないという認識にすることにした

Updateでも物理演算をできるようにする設定があるらしい

2022.1ぐらいからUpdateで物理演算をできるようにする設定が追加されたらしい
FixedUpdateの意味とは。。。

Edit -> Project Settings -> Physics -> Simulation Mode

まとめ

とりあえず、私が実装する限りは、公式の説明の通りにtranform.positionを動かす場合は、Updateで行うことにした。

Unity2022.1移行であれば、FixedUpdateはもう使わなくてもいいのではないかという気さえしてくる。

複数のUpdateがあるとこんがらがることもあるのでなにか困ることが起こるまでは、シンプルにUpdateを使っていこうと考えている。

参考

https://hinagame.com/updatefixedupdate

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です