Unityで地面を動かしたときの挙動


動く床を作ったけど上に載ったボールが微動だにしない。

roll

そもそも物理演算周りもよくわかってないので色々試して解決したので覚書きします。

ググっても情報ないのは調べ方が悪いのか、需要がないのか、当たり前の話だからなのか。

Rigidbody同士の摩擦

準備

  • デフォルトのシーンにCube2つを追加する
  • Cube2つにRigidbodyと摩擦の強い反射特性を追加する
  • 土台のほうのCubeにスクリプトを追加して動かす

quake3

quake4

ポジションを移動させる場合

quake1

力を加える場合

quake2

この結果について

Rigidbodyとしての動きでないと摩擦が働かない。

そのため動く床なんかをPlaneで作っても乗った物体がボトボト落ちてしまう。ドラゴンズレアみたいだ、慣性どこいった。

PlaneにRigidbodyをつけようにもKinematicである必要があるので物理演算はされないので詰んだかと思ったら普通に解決できました。

動く床の解決法

準備

PlaneにRigidbodyを追加してIsKinematicをオンにする。

CubeのスクリプトをPlaneに付け替える。

結果1

quake5

床の移動に対して摩擦が働いた!

transform.position でなくて Rididbody.MovePosition を使えばよかったのか。

rigidbodyのpositionを直接変えてもいけるかなと思ったけどそれはダメだった。

でも摩擦が 1 なのになんでずれるだけなんだ。

結果2

quake6

そういえばRigidbodyの操作はFixedUpdateでする必要があった。

これで円満解決!

 

最初の画像のやつも Rigidbody.MoveRotation を使って解決しました。

roll2

 


コメントを残す

メールアドレスが公開されることはありません。