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で移動させましょう。
それでは今回はこの辺でノシ