はかせのラボ

私の頭の中を書いていく雑記ブログです

Unity RigidbodyがついたGameObjectを瞬間移動させるときのベタープラクティス

あいさつ

どうも、はかせです。
今回は知人に聞いたUnityTipsの紹介です。

RigidbodyがついたGameObjectをtransform.positionで移動させるのは効率が悪いらしい

Unityを触ってたらRigidbodyが付いたものを
transform.positionで移動させない方がいいっていう話は
割と知っていると思います。
(transform.positionで移動させちゃダメなら瞬間移動はどうすればいいの・・・?)
ただ何故かを答えられる人って意外といないと思います。
実際私も今朝までそうでした。

なんで悪いの?

Rigidbodyの衝突計算はなにやら
Update前のタイミングで行われているそうです。
なのでtransform.positionで動かしたら
衝突計算を全て再計算してしまうらしいです。
(この情報は英語のリファレンスにしか載ってないとか)

どうしたらいいの?

rigidbody.positionを使えばいいみたいです。
docs.unity3d.com

これはrigidbodyの位置を指定できるので
これで移動させたら再計算が走らない・・・らしいです。

あとがき

今回は知人に教えてもらったUnityTipsでした。
正直私はrigidbodyの計算とtransformの計算結果が
ぶつかるとかその辺かなーなんて
思っていたのでびっくりしました。

まさかぶつかるどころか再計算が走るとは・・・
おまけに重いといわれている(実際重い)衝突計算・・・
Rigidbodyがついてるオブジェクトを瞬間移動させたいときは
rigidbody.positionで移動させましょう。

それでは今回はこの辺でノシ