質問: ### 前提・実現したいこと パーティクルシステムのデフォルトのテクスチャを使って、最終的には次の仕様のパーティクルを作成したいと考えています。 ``` 1一ヵ所で発生して、一個のみ生成(一個に見えるように生成)。その場所に留まり、移動はしない。 2最初に、半径0(もしくは限りなく小さい)から、時間経過と共に指定した半径まで広がる。 3そして、指定した半径まで広がったら、今度は若干小さくなり、また元の大きさまで広がるの繰り返しが続く。 4インスペクターで2の広がる速さや、3の小さくなったり大きくなったりの速さを調整できるプロパティを 知りたい。 ``` まず、2の時点で既に意図したものが作れていません。 また、2の作成の時点で新たな疑問が生じました。 ### 試したこと デフォルトのパーティクルの設定から ``` ・Duration:5(デフォルトのまま) ・StartLifetime:5(デフォルトのまま) ・StartSize:1(デフォルトのまま。広がりきった時の半径はこの大きさでよい。) ・StartSpeed:0 ・EmissionのRate:1 ・Shape:Cone。 ・ShapeのRadius:0.01。 ・(とりあえず、2までの仕様を完成させたいので)、 SizeoverLifetime:CurveでSize0.0から1.00までの右上がりの直線。 ``` これを実行してみると、初めは半径0ぐらいから、徐々に大きくなるのですが、5秒経過して、1個のパーティクルが消えると、ここから先、自分の予想では、また半径0ぐらいから、徐々に大きくなる球が出現すると思っていたのですが、その1個が消えた直後、既にある程度大きさを持った球が現れて、1秒で広がりきってまた消えての繰り返しになります。 ここで思う疑問。 ``` 1なぜ、最初の球が消えた後、既に少し大きくなった球が出現するのか? また、最初の球が消えた後も半径0ぐらいから徐々に大きくなる球を出現させて、 また消えて、同様の球がまた出現する、その繰り返しをするにはどう設定すればよいのか? 2最初の球が指定の半径まで大きくなったら、そこでストップさせることはできないのか? 最初の球を消さないで、その半径を維持したままにする方法はないのか? (できれば、スクリプトの操作でなく、インスペクターの設定で。) ``` そして、冒頭に書いた最終的な仕様を完成させる方法が知りたいと思っています。 質問が多くなってしまった為、最終的な仕様は簡単なアドバイスとかでもかまいませんが、 疑問12に関して、ご教授お願いします。
回答: 結論から言うと、パーティクルシステムで行う内容ではありません。 Animationなどを利用した方が理想通りの動きになるかと思います。 理由として、パーティクルシステムは1つのパーティクルが「生成→消滅」することを前提としており、「ループする」ことを想定していません。 (システム上「生成し続ける」ことは出来ますが、パーティクル単体では「生成→消滅」を繰り返します) ■疑問1への回答 恐らくEmissionのRate設定が「Time」になっているかと思いますが、これは「1秒毎にn個生成」という設定です。 なので1秒毎にパーティクルが生成され、重なり合っている所為で「最初の1粒が消えた時、既にある程度大きくなった次の1粒が重なっている」ので「大きさが0にならない」ように見えています。 EmissionのRateを「0」にし、Burstsに「Time:0.00、Min:1、Max:1」の項目を付け足すと「Duration1回につき1個生成」という設定となり、想定通りの動きとなります。 ■疑問2への回答 「パーティクルを消さない」という設定は出来ません。 (Lifetimeを物凄く長くすればそのように見せかけることも出来ますが、その時間が来れば消えるので永続的ではないです) 前述の通り、オブジェクトを作成してAnimationを使用した方がいいでしょう。