お世話になっております。
1点、気になったことがあったのでお知恵をお借りできれば幸いです。
#前提
ParticleSystem 1つを使いまわす方法で処理を作っており、その機能のデバッグを行っていたところ
多重に同時再生がコールされるとすべてが再生できていないことがわかりました。
#質問したいこと
ParticleSystemのオブジェクトを1個で管理して、エフェクトが必要なときには位置を動かしてPlayという流れで使いまわしを考えていたのですが
多重に同時再生する可能性がある場合は違うやり方をとったほうが良いのでしょうか?
Debug.LogでPositionを追ってみたところParticleSystem自体の位置は移動してるものの、Playが呼ばれる前に他のオブジェクトでの移動が走っているせいで再生しきれていないのかなと予測しています。
(たとえば、右下の2個は左側が先に接地 → すぐ右側が接地 → (結果)右側のCubeにだけParticleが再生されている)
サンプル(Cubeが地面にぶつかるとParticleを自身の位置に呼んで再生する)
→ ここでの理想は12個すべてのCubeにParticleが再生される挙動です。
サンプルコード(質問用にサンプルで組みました。本来はエフェクトを管理するマネージャーのようなクラスがいます)
cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test : MonoBehaviour { 6 7 ParticleSystem hoge; 8 9 private void Start() { 10 hoge = FindObjectOfType<ParticleSystem>(); // テスト用なのでシーンにはPSが1つのみ 11 } 12 13 private void OnCollisionEnter(Collision collision) { 14 hoge.gameObject.transform.position = gameObject.transform.position; 15 hoge.Play(); 16 } 17 18}
#改善案?
位置の移動と再生までが保証されていないせいでこの現象が起こっているのかなと思うので
パーティクルシステムをプールするような設計にしておきisPlaying中なら新しいParticleを生成し再生。再生し終わったのはキャッシュしておき使い回す。というようなやり方になるでしょうか?
わかりにくい質問内容となってしまいましたが、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/26 01:59