ご無沙汰しております。

久しぶりの更新となりますが、今後しばらくはUnityでの制作のメモを書いていくことにしたいと思います。

さて、Unityでポーズを実現するために一番手軽なのは、Time.timeScale = 0;として再生速度を停止してしまうことです。
ただ、停止中はアニメーションも止まってしまいます。

アニメーション用のメソッドを自前で用意してUpdate()内で実行すればアニメーションすることもできるかもしれませんが、Time.deltaTimeなどが使用できなくなる気がするので面倒くさそうです。

Time.timeScaleを使うのではなく自前でポーズ用の処理を作る方法もありますが、これもかなり面倒です。
なので、timeScaleを使った上でアニメーションさせる方法を紹介します。

まず、普通にアニメーションを行う場合は以下のページが参考になると思います。

 【Unity】時間を止めてもアニメーションさせる:Unity/cocos2d-x開発メモ

AnimatorのUpdate Modeを「Unscaled Time」にするだけなので、とても簡単ですね。
私はAnimatorを全く理解していないので、行き着くまでにものすごく時間がかかってしまいました。

ただ、当たり前の話ですが、この方法だとAnimationとして登録していないものは処理ができません。
いちいちAnimationを登録するのも結構かったるいものですし、遅延して処理を行いたい場合もあると思います。
その際に役に立つのが以下のページで紹介されているスクリプトです。

Unscaled time invoke? | Unity Community

ページ中にも記載されていますが、
Invoker.InvokeDelayed(実行したいメソッド, 経過秒数);
と指定することによって、Time.timeScale=0;になっていても遅延処理を実行することができます。
とても便利ですね。ありがたいことです。

というわけで、若干分かりづらいのですが、実際に使ってみたところを動画にしました。
メニューが表示されている時はゲームがポーズしていますが、メニュー開閉時などにアニメーションしているのがお分かりになるかと思います。



他にも同様の処理を実現出来る方法や、もっとスマートな方法もあるかもしれませんので、そこは調べていただければいいかと思います。

追記)以下の記事でDOTweenによるポーズ中のアニメーション実行について書きました。
コーディングでアニメーションしたい場合は、以下の方法が楽だと思います

 【Unity】DOTweenでポーズ中のアニメーションを実行する。