経緯
ある日、落ち物ゲームを開発していました
落とすオブジェクトを始めは画面上部に固定しておいて、「落とす」ボタンを押した時に落下を始める様にしました。この固定/落とす仕組みはRigidbody2D.simulated
を切り替えることによって実装していました。
その後、落とすオブジェクトをマウスドラッグ操作で移動させられるようにOnMouseDrag
関数内に移動スクリプトを書きました。
すると、落とすオブジェクトが画面上部に固定されている最中はドラッグ移動が出来ず、「落とす」ボタンを押して以降、物理演算が有効になっている最中のみドラッグ移動が出来るようになりました
結論
物理演算を切った状態でドラッグしたい時はRigidbody2D.isKinematic = true
を使いましょう
なぜ
Rigidbody2D.simulated
の公式リファレンスには以下の様に書かれています
シミュレーションしない場合、アタッチされているすべての Collider2D や Joint2D は物理シミュレーションに組み込まれません。
またMonobehaviour.OnMouseDrag
関数の公式リファレンスには以下の様に書かれています
OnMouseDrag はユーザーが GUIElement または Collider をマウスでクリックし、ドラッグしている間呼び出されます。
すなわち、Rigidbody2D.simulated = false
の時はコライダーが反応しなくなっているのでOnMouseDrag
関数が呼ばれないと推測できます