カテゴリー
制作

ポーズ機能を試作

ゲーム中にいわゆるメニュー画面を表示することを考えて、ポーズ機能を作り始めてみた。
スクリプトの制御でtransformを直接変えたりしている場合は「一時停止フラグが立っていたら何もせずにreturnさせる」などでこれを停止させれば良いはず。
RigidBody を使っている場合は、一時停止フラグが立っている間Is Kinematicをtrueにすればよいと思ったが、これだけでは停止直前に働いていた慣性が失われてしまう。
そこで、停止時にRigidbody.Velocityの値をVector3変数にコピーしておき、一時停止の解除時にコピーした値をRigidbody.Velocityに戻す方法を試してみた。

フラグの管理はシーン管理者のブール変数で行う。
停止の管理が必要なオブジェクトは、シーン開始時にシーン管理者のタグから管理者のインスタンスを取得しており、停止フラグを参照できるようにした。負荷を軽くするため、停止と再開の処理は一時停止管理用のフラグが変わるときにのみ行う事にした。
各オブジェクトは、シーン管理者の停止フラグがtrueになったら、velocityの保存、IsKinematicフラグをtrueにするなどの処理を行ってから自身の停止フラグをtrueにする。
逆にシーン管理者の停止フラグがfalseになった場合は、IsKinematicフラグをfalseにし、保存したvelocityを取り出して自身の停止フラグをfalseにする。

後々アニメーションなどを追加するともっと考える事が増えるかもしれない。