[Unity] ポーズ動作をTime.timeScale=0を使わずに実現する(その2)

By | 2014-06-05

前回の記事でTime.timeScale=0を使わずにポーズ動作を実現する方法について書きました。
しかし、Rigidbodyコンポーネントを持ったゲームオブジェクトでは、ポーズしてもそのまま物体をすり抜けて慣性で動き続けてしまいます。
逆にRigidbodyを使わないゲームオブジェクトであれば前回の記事で公開したスクリプトだけでも十分でしょう。

今回はRigidbodyのポーズ動作も考慮したポーズ動作の実現方法について書きます。

結論から言うと、rigidbodyコンポーネントのSleep()、WakeUp()メソッド呼び出しで実現できます。
しかし、上記だけではWakeUp()メソッドの実行時に物体の速度と角速度が0になってしまいます。
この問題を解決するために、WakeUp()呼出し後にSleep()呼び出し前の物体の速度と角速度に戻す必要があります。

これらを考慮することで、綺麗なポーズ/ポーズ解除が実現できます。
前回の記事で公開したスクリプトにRigidbodyのポーズ機能を追加したスクリプトを公開いたします。

Pauser.cs

RigidBodyのポーズ操作は2D用に対しても行い、子オブジェクト全てに適用できるようにしておきました。
これで、物理演算を用いたポーズ処理もスクリプトの追加だけで実現できるようになりました。

めでたしめでたし。

コメントを残す

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