アニメーションや音、エフェクトなどの演出をタイムスケールを0にすることで一時停止/再開してみました。
アニメーション
アニメーターコンポーネントのUpdate Modeが「Normal」のときは、タイムスケールに合わせてアニメーションが停止します。
「Unscaled Time」を選択すると、タイムスケールを0にしても、アニメーションが停止しなくなります。
タイムラインでアニメーションを再生する場合は、Playable Directorコンポーネントの「Update Method」を使って切り替えられます。
音声
アニメーションと同様に、タイムラインでAudioSourceを再生できます。
タイムラインを使わずに直接再生するときは、タイムスケールで停止できないようです。
AudioSource.PauseとAudioSource.UnPauseメソッドを使うと、一時停止/再開ができました。
using UnityEngine;
using UnityEngine.Audio;
public class TestScript4 : MonoBehaviour
{
[SerializeField] AudioSource audioSource;
[SerializeField] AudioClip audioClip;
[SerializeField] AudioClip audioClip2;
[SerializeField] AudioMixer mixer;
[SerializeField] AudioMixerUpdateMode audioMixerUpdateMode;
[SerializeField] AudioMixerSnapshot[] snapshots;
bool isPaused;
private void Start()
{
//mixer.updateMode = audioMixerUpdateMode;
audioSource.Play();
//audioSource.PlayOneShot(audioClip);
//audioSource.PlayOneShot(audioClip2, 0.1f);
//ChangeSnapshot();
}
public void OnPaused()
{
isPaused = !isPaused;
Time.timeScale = isPaused ? 0f : 1f;
PauseAudioSource();
}
void PauseAudioSource()
{
if(isPaused)
{
audioSource.Pause();
}else
{
audioSource.UnPause();
}
}
void ChangeSnapshot()
{
mixer.TransitionToSnapshots(snapshots, new float[] { 0f, 1f}, 10f);
}
}
これはPlayOneShotで再生した場合も使えました。
また、オーディオミキサーに「updateMode」という変数がありますが、これはスナップショットの遷移に使われます。
スナップショットを遷移させて音量をフェードアウトする場合、「Unscaled Time」では遷移の途中で一時停止しても遷移を続けますが、「Normal」では一時停止すると音量の変化が止まり、再開すると音量が再度下がり始めます。
エフェクト
Particle Systemでは、Delta Timeという項目で「Scaled」と「Unscaled」を切り替えることができます。「Scaled」ではタイムスケールが0だと停止し、「Unscaled」では停止しません。
VFXグラフの場合、タイムスケールを0にすると停止します。パーティクルシステムのように切り替えることはできないようです。
詳細はこちら → https://store.steampowered.com/app/2178340/Reality/