謎の歩行生物(仮)【PART33】~ポーズ画面(一時停止の処理)を作ってみた~

LINEで送る
Pocket

005

前回は、死亡演出の処理を作ると言ったのですが、そちらより先にポーズ画面(一時停止させる処理)を作ることにしました。

ポーズ処理、死亡処理、ゲームクリア処理は、「特定のタイミングで新しいメニューを表示・選択させるようにする」という共通の処理を考えています。ですのでポーズ画面を作ったら、その処理を応用して、死亡演出やゲームクリア演出を作りたいと思いました。順番的にはどれから作ってもよかったのですが、ポーズ画面は「ポーズボタンを押したら…」というタイミングで始まるので、すでにボタンが用意されている分、処理の確認が楽だったという理由なだけです。

 

目次

簡単にポーズ画面(ポーズ処理)を作りたい

当たり前の話ですが、ポーズ画面ではオブジェクトの動きを停止させる必要があります。一般的にUnityでポーズ画面を作ろうと思ったら【Time.timescale】を使用します。私も今までの作品ではこれを使っていました。

このTime.timescaleというのは、簡単に言うとゲームの進行速度です。

Time.timescaleが「1」の時はリアルタイムと同じ速度でゲームが動きます。この値が「2」だったら2倍の速度で動くし、「0.5」なら半分の速度で動くことになります。ゲームを早送りしたみたいに動かしたり、逆に「死ぬ瞬間だけスローモーションにしたい!」みたいな演出をしたりする時に使えます。この値を「0」にすると進行速度が0になるのでゲームが静止した状態になるわけです。ただ、ーズ中でも止まってほしくないものまで止まってしまったり、時間に影響しない処理は止まらなかったりと、何も考えずに使うと色々と面倒くさいこともあります。何かもっと楽な方法はないのだろうかと色々調べてみました。

 

Time.timescaleを使わないポーズ処理

色々と情報を漁っていたら、めっちゃ便利な停止処理のソースコードを公開している人を見つけました。

[Unity]最もシンプルなポーズ処理

他にもシェーダーを作る記事とか色々と面白いです。

で、こちらの処理を使わせていただいて、ポーズ処理を実装しました。

002

①まず空っぽのオブジェクト(私の場合「PauseManager」という名前にしました)を作って、先ほどのサイトのスクリプトをコンポーネントに追加します。

②そしたらポーズ画面の時に停止させたいオブジェクトを、全部そのPauseMnagerの子オブジェクトにします。

③あとは、スクリプトで停止させるかどうかのフラグを立ててあげると、その子オブジェクトを停止させることができます。

実装が超ラクチン。

さらに子オブジェクトの中にあっても、停止させたくないオブジェクトを指定することができちゃうという便利さ。

ただ、この停止処理だとパーティクルは停止しないようなので、パーティクルは別で停止させるようにしました。パーティクルもひとまとめに停止させられれば一番楽なんですけど、いまいちよく分かんないです。プログラムは専門じゃないので…。

とりあえずパーティクルの停止は

【public ParticleSystem 変数名;】で変数を作って、インスペクタからオブジェクトを指定できるようにしたら、

変数名.Pause();】で停止、【変数名.Play();】で再生と非常にシンプル。

停止させるのも背景のパーティクルだけなのでいいですが、パーティクルを大量に出している場合は大変かも…。

 

実装したポーズ画面

前回紹介したUIのアニメーションと合わせて、ボタンを押したらポーズのアニメーションを行って、画面が停止するように実装してみました。

ひとまず出来ましたが、今後ボタンを押しやすい場所に配置し直したり、デザインも作り直していく予定です。

 

スポンサーリンク

スポンサーリンク

LINEで送る
Pocket