【Unity】パーティクルにマスクをかけて表示範囲を制限する方法
ここでは下の動画のように「扉の向こうにモヤモヤした光が広がっている」表現を実装したかったのですが、その際にパーティクルの表示範囲を扉型に制限する方法を使ったのでその方法を書き留めておきます。
ちなみにこちらのゲームはUnity1weekという1週間ゲームジャムで作ったゲームを元にしています。実際の見え方を知りたい場合は以下のリンクからプレイできますので、試してみてください。
環境
- Unity 2018.3.6f1
このページの構成
ポイント
- UnityにはSpriteMaskというSpriteにマスクをかけて表示をコントロールする機能がある
- SpriteMaskはパーティクルにも適用できる
- 使い方は以下の通り
- ① SpriteMaskコンポーネントをParticleSystemにつけて、Maskに使用するspriteを指定しておく
- ② ParticleSystemのRendererにあるMaskingから、①で指定したspriteの内側のみに表示するか外側のみに表示するか設定する
パーティクルを表示する
パーティクルの設定
まずは普通にパーティクルを作成します。
ヒエラルキービューから「Effects」-「Particle System」を選択してください。
ここでは以下のような感じでパーティクルを設定してみました。
変更したのは色とStart Life Time、Start Size、Max Particlesくらいです。
表示は以下のようになっている状態です。
パーティクルにマスクをかける
マスク用のspriteをセットする
先ほど作ったパーティクルにマスクをかけて、ドアの形の範囲内にのみパーティクルを表示するように変更していきます。
Particle Systemを選択し、Add ComponentからSprite Maskを選択してください。
spriteの欄に、パーティクル用のマスク画像を設定しておきます。ここでは「door2mask」という名前で以下の画像をセットしました。
設定としてはこのような感じになっている状態です。
パーティクルにマスクを適用する
先ほどセットしたマスク用画像の範囲にのみパーティクルが表示されるようにしていきます。
Particle Systemの「Renderer」に「Masking」という項目があるので、そこの値を「Visible Inside Mask」に変更してみてください。先ほど指定したマスク用画像の形にパーティクルの表示範囲が制限されると思います。
ちなみに「Masking」の値を「Visible Outside Mask」に指定すると、マスク用画像の外側にのみ表示させることもできます。