投稿者 tel | 2016年11月20日

パーティクルをポーズするとStart Delayの経過時間がリセットされる

ParticleSystem.Pause を呼び出してパーティクルをポーズして、再度Playして一時停止を解除するとStart Delayの経過時間がリセットされている挙動をする。つまりPauseとPlayを交互に繰り返すと、いつまでたってもパーティクルが放出されない。

エフェクトの一時停止をしようとした場合、Start Delayが設定されているパーティクルは再生時間がずれてしまい困ったことになる。

https://docs.unity3d.com/ja/current/ScriptReference/ParticleSystem-startDelay.html

どうやらバグのようだが、Issue Trackerでは直ったことになっている。

https://issuetracker.unity3d.com/issues/shuriken-particlesystem-dot-pause-resets-start-delay
https://forum.unity3d.com/threads/5-3-5p5-754270-particles-start-delay-still-have-problem.413072/?_ga=1.122247371.1793905693.1359169028

テスト

パーティクルを3つ配置してそれぞれに0, 1.0, 2.0のStart Delayを設定して以下のコードで再生する。パーティクルを途中で一時停止して再生している。2.5秒間再生しているので3つすべてのパーティクルの放出がされるはずである。

startdelay_5_1_ss
Unity 5.4.2での実行結果。合計で2.5秒間再生しているのに、3つ目のパーティクルはまだ放出されていない。

startdelay_4_ss
Unity 4.6.9での実行結果。ちゃんと放出されている。

回避策

ParticleSystem.playbackSpeedを0にすればパーティクルの再生を一時的に止めることができるので、Start Delayが設定されているパーティクルはplaybackSpeedを0にして、再開するときは1にすればポーズ処理が実現できる。

https://docs.unity3d.com/ja/current/ScriptReference/ParticleSystem-playbackSpeed.html


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。