テクノモンキー(サブ)

テクノモンキーのサブブログです。 iOSやAndroid、Unityのアプリ開発に関する情報や気になったニュース、考え事などを気軽に発信します。

【Unity】Scene内のGameObjectをポーズ(一時停止)させる方法

https://unity3d.com/files/images/ogimg.jpg?1

Unityでゲームアプリを開発する時、必ずと言っていいくらい必要な機能といえば

「ポーズ(一時停止)」の機能。

 

ユーザーがゲームプレイ中に一時停止して違う作業をしたり、アプリがバックグラウンドに移行する時などにポーズ機能があったほうがいいですよね。

 

今回はUnityでSceneのポーズ(一時停止)をする方法について調べた結果を書き残しておきたいと思います。

 

 

やり方1.PauseManagerを実装する

 

謎の歩行生物(仮)【PART33】~ポーズ画面(一時停止の処理)を作ってみた~ – クリぬき!【ゲームクリエイターを目指す人へ!】

 

最初試してみたのが、上記の記事で紹介されているポーズを管理する、「PauseManager」クラスを実装する方法。

ポーズ画面で停止させたい子オブジェクトをPauseManagerの子オブジェクトとして全部突っ込むだけのシンプルさがいいな!って思いました。

しかも、特定のオブジェクトは停止させないとか、細かい指定ができるのもいいですね。

 

このやり方で試してみたのですが、Animatorで動かしているキャラが動き続けてしまう結果になりました。(多分、カスタマイズすれば行けるとは思うけど)

 

 

やり方2. Time.timeScaleを使うやり方

 

Time.timeScaleというのは、ゲームの進行速度を調整できるパラメータみたいなイメージです。

「PauseManager」のやり方の説明で、「Time.timeScaleでもポーズはやることもできるけど、色々カスタマイズしたいなら「PauseManager」の方が便利!」的なことが書かれていたので、Time.timeScaleは使わないだろうと思っていたのですが、「PauseManager」でうまくいかなかったので、Time.timeScaleを使うことに。

 

Unityの一時停止で止まるもの、止まらないもの【Time.timeScale】 | TECH Projin

 

上記のサイトを参考にさせて頂きました。

実際にTime.timeScaleを使って見ると、Animatorのアニメーションもちゃんと止まる!

僕の場合、「このオブジェクトはポーズ中も動かしたい!」ってものがなかったので、今回はこれで十分かもです。

 

ただ、Translateでゲームオブジェクトを移動させているものはTime.timeScaleでは止まらなかったので、velocityで移動する形に変更したら無事停止しました。

(上記サイトにある通り)

 

 

 

他にも一時停止の方法はあるかもですが、簡単ですぐできそうなのはこの2つかなー。

Unityで一時停止する方法、実装する前は大変そうかと思ってましたが、やって見ると意外と簡単ですね。