質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

5199閲覧

Unity Particleを多重に同時再生する方法について

hogefugapiyo

総合スコア3302

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2020/03/25 03:21

編集2020/03/25 03:22

お世話になっております。
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}

サンプル Particle
イメージ説明

#改善案?
位置の移動と再生までが保証されていないせいでこの現象が起こっているのかなと思うので
パーティクルシステムをプールするような設計にしておきisPlaying中なら新しいParticleを生成し再生。再生し終わったのはキャッシュしておき使い回す。というようなやり方になるでしょうか?

わかりにくい質問内容となってしまいましたが、どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GIFを見るに、同時に着地してるように見えるが厳密にはキューブの着地に若干のズレがあり、ずれている個所だけ再生され、同時に着地したキューブはどれか一つのみパーティクルが再生されているように思います。(目の錯覚かもしれませんが...)
一つの物を使い回そうとする理由は恐らく処理の軽量化を図るためだと思いますが、一つの物を同時に再生するのは不可能なので、単純に再生したいパーティクルをプレハブ化し、再生時にインスタンスして再生が終了したらデストロイでいいんじゃないでしょうか?

投稿2020/03/25 06:56

編集2020/03/25 07:34
Y0241-N

総合スコア1066

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hogefugapiyo

2020/03/26 01:59

ご回答ありがとうございます。 オブジェクトプールのような感じでエフェクト類を管理するようにし、必要に応じてインスタンス化orキャッシュされたのを再利用という方法で実現しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問