Unity

[Unity] ParticleSystemでSpriteの形状に沿ってパーティクルを出現させる

実行環境

  • Unity2018.2.2f1

この記事について

この記事は Unityゆるふわサマーアドベントカレンダー 2018 の29日目の記事となります。あまり中身のない文章で恐縮ですが、Unity2018.2の新機能である ParticleSystem における SpriteShape について記載します。

初期状態

UnityEditorに対して以下を配置したものを用意しました。

  • SpriteRenderer: いらすとやの画像を指定したもの
  • ParticleSystem: 初期状態からMaterialをひし形状の素材に差し替えたもの

sp1.gif

Shapeモジュールを変更する

中央に表示されている画像に沿うように ParticleSyatem の設定を変更してみます。
Unity2018.2から Shapeモジュールにて Sprite および SpriteRenderer を設定できるようになりました。
(下記の画像にて左から Unity2018.1 / Unity2018.2 )

sprite.png

Sprite および SpriteRenderer を設定するとモジュール内に Sprite という項目が追加されます。

sprite2.png

こちらには Sprite および SpriteRenderer の選択した方のアセット/コンポーネントを指定します。
今回は SpriteRender を選択し Hierarchy からドラッグして SpriteRenderer を指定します。
これにより、画像の形状に沿うようにParticleが表示されるようになりました。

sp2.gif

3Dモードで見てみましょう。
現在初期のパーティクルの設定に基づき StartSpeed = 5 で設定されているたのですが、奥行き方面に射出されていました。
また Shape モジュールの Type の設定が Vertex だったため、画像の頂点から射出されています。
(特定の画像を埋め尽くすように描画させたい場合 Type には Triangle を指定します)

sp3.gif

今度はこの画像から全方位にパーティクルを飛ばす設定を入れてみましょう。
Force ove Lifetime モジュールを使用するやり方もありますが、今回は Shape モジュールで完結させます。
Shape モジュール内の Randomize Direction1 に設定します。
これで StartSpeed で設定された速度で完全にランダム方向に射出するようになりました。

sp4.gif

しかし、これだと画像の内側にめり込むような方向で射出されるため、見栄えがよくありません。
Shape モジュール内の Shaperize Direction1 に設定します。
これにより、画像の中心から外側に向かうような方向で射出されるようになりました。

sp5.gif

サイズや色味などを調整して以下のような演出を作ることができました。

sp6.gif

残像のような演出を作る

  • StartSpeed = 0 に設定し、その場で留まるようにします
  • Simulation SpaceWorld にします
  • Shape モジュールの typeTriangle にし、出現ポイントを頂点から面に変更して埋め尽くすようにします

この状態でオブジェクトを動かすと、出現したパーティクルはその場に留まるため残像が残るような表現になります。
(以下のgifにて StartSpeed = 0 なのに少し動いているのは Noise モジュールで揺らぎを持たせているからです。自然に見えてオススメ)

sp8.gif

色味も反映したい場合、同一のSpriteを複製し、Texture用の設定をしたものを用意して
Shape モジュールにおける Texture を指定すると良さそうです。

sp9.gif

注意事項

Shape に SpriteRenderer を指定する場合、Transformの変更に追従するようになります。
この時、Emitされる範囲だけが変更になるのではなく、完全にパーティクル自体もリサイズされてしまう親子関係のような挙動になってしまっている点に注意してください。

sp7.gif