【Unity】(5分でわかる)パーティクルの使い方

みなさんはゲームを作るとき、エフェクトは取り入れていますか?
エフェクトをゲームに取り入れることで、感動的で臨場感のある演出が可能になります。
今回は、そのエフェクトのうち、パーティクルをUnityで扱う方法について解説していきます。
ぜひしっかり抑えてゲームの演出に活用していきましょう!
Unityについて詳しく学びたい人は、下の記事で僕が厳選したおすすめのUnity学習本を3冊ほど紹介していますので、ぜひ参考にしてみてください
パーティクルって?
パーティクルとは、小さなスプライトやメッシュを大量に生成し、動きを加えることで、さまざまな視覚効果を表現するのに使われるものです。
雨が降っている演出や、ものが燃えているときの火の粉が舞う演出等を想像していただけるとわかりやすいかと思います。
Unityでは、パーティクルシステム(Particle System)というものが用意されており、これを使ってパーティクルを扱っていきます。
パーティクルでできること
環境の表現
雨、雪、霧、風、砂埃や水しぶき等の環境の演出に使えます。

物体の衝突
物体同士が激しく衝突したときの破片が飛び散る演出に使えます。

SF的な効果
魔法の詠唱や、シールド、ワープエフェクト等のSF的演出に使えます。

UIや背景の装飾
ボタンタッチのときに星を散らせたり、ゲーム画面の背景に星を散りばめて夜空を表現したりできます。

実際に使うには
それでは、実際にどうやって使用するかを見ていきましょう。
アセットストアからダウンロード&インポートしよう
まず、使用するにはパーティクルを用意する必要があります。
そして、unityにはパーティクルを作るためのパーティクルシステムという機能が一応備わっています。
しかし、素人が一から作るのはめちゃくちゃ難しい&自分が納得のいくパーティクルは作れないということで、ここは素直にアセットストアから持ってきます。
まずは画面左上にあるAsset Storeと書かれたプルダウンメニューをクリックしてください。
次に、でてきたメニューのAsset Store Webをクリックしてください。

すると、ブラウザが起動して、このような画面に飛ぶと思います。

パーティクルのアセットがほしいので、上部のVFXのタブを開き、パーティクルを選択します。

パーティクルの画面が開いたら、今回は無料のアセットを試しにダウンロードしたいと思いますので、Sort byタブをクリックし、Price(Low to High)を選択してください。

今回は先頭にでてきた3D_Effects_VariousHit(Canmu)をダウンロードしてみたいと思います。
Add to My Assetsをクリックしましたら、Unityに戻りましょう。

もう一度Asset Storeと書かれたプルダウンメニューを押し、My Assetsを選択してください。

先ほどAdd to My Assetsを押したアセットが表示されているかと思いますので、ダウンロードを押します。

そして続けてインポートボタンを押します。

このような画面が出ますが、すべての項目にチェックがついていることを確認して、importを押しましょう。

これでインポートが完了しました。
見てみよう
それでは、実際にどんなやつがインポートされたのか見てみましょう。
Assetsフォルダ>EasyAssets> Hit_Effect_Pack>Effect> Prefabsを開いてください。
すると、パーティクルのプレファブが並んでいる画面が開きましたね。
試しに一番左のこのプレファブをシーン上に設置してみます。

このアセットの場合、プレファブの一つ下の階層のrootオブジェクトにパーティクルシステムがあるようなので、rootオブジェクトをクリックして再生してみます。
一瞬光りました。シューティングゲームとかで活用できそうですね。
使ってみよう
それでは、今度はスクリプトからパーティクルを再生させてみましょう。
スクリプトからの操作を押さえれば、ゲーム中の好きなタイミング(攻撃アクション時とか)に自由にパーティクルを出現させることができるようになります。
まずはスクリプトを作成してください。
右クリック→Create→Scripting→NewMonoBehaviourScriptで作成できます。
今回僕はParticleという名前にしました。
スクリプトを開いて、以下のプログラムを書きましょう(テンプレのプログラムを消してすべて貼り付けでOKです)
using UnityEngine;
public class Particle : MonoBehaviour
{
[SerializeField] private ParticleSystem particle;
void Update()
{
if(Input.GetMouseButtonDown(0)){
Play();
}
}
private void Play()
{
particle.Play();
}
}
解説します
[SerializeField] private ParticleSystem particle;
→[SerializeField]で、スクリプトの外から再生させたいパーティクルを当てられるようにします。
→パーティクルを扱うためにParticleSystem 型のparticle(名前なんでも可)を宣言します。
particle.Play()
→パーティクルを再生させます。
全体的に見ますと、画面をクリックするとパーティクルが再生されるというプログラムになっています。
Ctrl+sキーで保存し、Unityの画面に戻ってください。
今度は、スクリプトを実行するためのゲームオブジェクトを作成します。
左上の+ボタンを押し、Create Emptyを選択します。
名前を適当に決めたら、このゲームオブジェクトに先ほど作ったスクリプトをドラッグ&ドロップでアタッチします。
そしたら、インスペクターを見てください。アタッチしたスクリプトがあると思います。なかったらもう一度アタッチしなおしましょう。
また、Particleという項目が表示されているかと思います。
このParticleの右側のNoneとなっているところにパーティクルを当てはめます。

先ほどシーン上においたパーティクルが、ヒエラルキーにもあると思いますので、それのrootのみをドラッグ&ドロップでNoneとなっているところまで持っていってください(rootの親オブジェクトはただの箱で、不要なので気にしないでください)

Particleにrootが当てはめられていればOKです。

そしたら実際に実行してみましょう。
下の動画のように、画面をクリックするとパーティクルが再生されます。
※パーティクルが表示されない場合は、Main Cameraとパーティクルオブジェクトの位置関係的に画面に表示されていない可能性があります。
パーティクルを使いこなそう!
いかがでしたか?
パーティクルをUnityで使いこなすことができれば、より表現の自由度を高めることができます。
アセットのインポート方法から、スクリプトでの扱い方までしっかりおさえ、今後のゲームづくりに活用していきましょう!