【Unity】(5分で分かる)エフェクトの使い方

今回は、ゲームの印象を決める重要な要素のエフェクトについて解説していきます。
エフェクトをマスターできれば、遊んでくれる人に楽しさ、臨場感、感動を与えるゲームを作ることができます。
ぜひしっかりとエフェクトの使い方(実装方法)を学んでいきましょう!
Unityについて詳しく学びたい人は、下の記事で僕が厳選したおすすめのUnity学習本を3冊ほど紹介していますので、ぜひ参考にしてみてください
どんな場面で使う?
まずは、具体的にどのような場面でエフェクトが使用されるか見ていきましょう。
具体例をいくつか紹介していきます。
戦闘・攻撃エフェクト
剣の斬撃やスラッシュ時の軌跡、魔法やスキル等攻撃系の演出に使用されます。

環境・自然エフェクト
火や煙、雨、風、水流など、自然系の演出に使用されます。

UI・演出エフェクト
ボタンやメニュー押下時の光や波紋、ダメージを受けたときにHPゲージが弾むといった、UI系の演出に使用されます。

エフェクトは自作するな!
ほんの一部ですが、エフェクトが具体的に使用される場面について解説してきました。
この項では、エフェクトをゲームに取り入れるなかで注意してほしいことについてお話させていただきます。
その注意してほしいこととはズバリ、エフェクト(というか素材全般)は自作するな!ということです。
興味の無い方は次の項に飛ばしていただいても結構ですw
ゲーム開発うんざり原因ランキング1位!→素材作りが面倒
読者の方の中には、自分でゲームを作るからには、素材もすべて自作したい!(すべき!)という考えの方もおられるかもしれません。
もちろん否定しませんし、オリジナリティが出るのでプラスの面も大きいです。
ただ、ゲームを完成させるには、プログラミングからサウンド、キャラデザ、背景、エフェクト等々多くの要素/工程が必要です。
もしあなたが個人開発者で、素材を一から作りたいという考えの方だった場合、上記の工程をすべて一人で行う必要があります。
かくいう僕も、昔は素材作りを自分ですべき派でした。
自分ですべて作らないと、自分ひとりでは何もできないやつということになる気がして、素材をストアから持ってくるということができなかったんです。
しかし、素材を自分で作った結果どうなったか。
一向に完成が見えないゲーム、少し雑な作りだけど疲れたからと妥協してしまうキャラデザやアニメーション、背景、そしてなにより、「つまらんくなってきた」と削がれる気力。
名作になるかもしれなかったゲームは完成せずに葬られます。
そもそも素人が作っても納得行くものは作れない
そもそも論ですが、あなたはゲーム開発者で、素材作りに関しては全くの素人です。
たとえ3Dモデルを作るのが多少うまくても、それ以外に音楽、エフェクト、アニメーション、背景等々も素材として必要ですので、それなりに作れる必要があります。
また、プロがつくったものと比較してしまって自分の作った素材の出来にげんなりし、あわやゲームづくりの気力までもが削がれる原因になりかねません。
それならば、初めから「自分の力じゃ素材を作れない」と認め、ゲーム開発のみに集中しましょう。
むしろそのほうが、プログラミング、演出、ストーリーにまわせる力・時間が増えて品質を高められる&素材はプロの高品質なもので固めるというダブルパンチで、最高のゲームが作れるとは思いませんか?
もしあなたが素材作りのしがらみにとらわれているのなら、そのしがらみから解放される必要があります。
もう素材は作らなくていいんです!アセットストアから持ってきましょう!
それでも素材を作りたい人は
では、それでも素材を一から作りたい個人開発者はどうすればいいのでしょうか?
答えは、覚悟するしかないということです。
一からそれなりのクオリティのものが作れるくらいのスキルを学び、せっかく10時間かけて作った素材が納得できない出来であってもめげずに作り続ける。
そんな覚悟が必要です。
長く険しい道のりなのでおすすめしませんが、進んでみると新たな道が開ける方もいるかもしれません。
エフェクトを使用する
ここまで少し話が長くなってしまい申し訳ないです。
というわけで、これからエフェクトを使用していくのですが、素材は一切作らないという意向のもと、アセットストアからエフェクトは取ってきます。
アセットストアから持ってくる方法は以下の記事で以前説明していますので、知りたい方はどうぞ。
今回は、エフェクトをどんな感じで使っていくのかという視点で記事を書いていきます。
では、まず以下の動画をごらんください。
Ctrlキーを押すとアニメーション&エフェクト発動という動きをするように実装しました。
ヒエラルキーを見ますと、キャラオブジェクトのEffectという階層にストアから持ってきたエフェクトをまとめて突っ込んでいます。

プログラム
ここからは、実際のプログラムを解説していこうと思います。
まず、変数の宣言についてです。
[SerializeField] private Animator _animator;
[SerializeField] private ParticleSystem ChargeSlashParticle;
[SerializeField] private ParticleSystem MagicCircleParticle;
private bool isAttacking=false;
_animator ←アニメーションの再生等をさせるために宣言していますが、本筋ではないのであまり気にしなくてOKです。
ChargeSlashParticle ←エフェクトを扱うための変数です。
MagicCircleParticle ←同じくエフェクトを扱うための変数です。
isAttacking ←アニメーション中かどうかを管理しておくためのフラグです。
次に、updateの中のプログラムです。
if(Input.GetKeyDown(KeyCode.LeftControl)&&isAttacking==false)
{
isAttacking=true;
_animator.SetBool("Magic",true);
MagicCircleParticle.Play();
}
if文で左のコントロールキーが押され、かつ、アニメーション中ではないときかを判定しています。
ifを突破したらまず最初にisAttackingをtrueにしてアニメーション中であることをフラグ立てします。
次に_animatorからMagicアニメーションの再生を行ってます。
そして、MagicCircleParticle.Play();により、パーティクルシステムを再生します(この時点でエフェクトが発生!)
他にChargeSlashParticleというエフェクトがありますが、アニメーションとのタイミングを合わせるために、アニメーションイベントを使用して再生させています。
以下がそのとき使用する関数です。
public void ChargeSlashPlay()
{
ChargeSlashParticle.Play();
}
以下の画像のように、アニメーションの途中でこの関数を呼びだすように設定しています。


また、アニメーション終了時点でフラグ解消&エフェクトの停止をさせたいので、下のような関数を作成し、同じ要領でアニメーションイベントに設定しています。
public void MagicAttackOff()
{
isAttacking=false;
_animator.SetBool("Magic",false);
ChargeSlashParticle.Stop();
MagicCircleParticle.Stop();
}


インスペクターの設定
プログラムの途中で[SerializeField]で宣言されている変数があったと思います。
これは、インスペクターから値を設定できるようにするための修飾子です。
実際にインスペクターを見てみるとこうなっています。

ヒエラルキーにおいたオブジェクトをドラッグ&ドロップで直接あてはめることで設定できます。
エフェクト実装方法をまとめると
エフェクトの実装方法をまとめると、、
1.プログラム中で、変数宣言
[SerializeField] private ParticleSystem ’エフェクト名’;
2.エフェクト発動させたいタイミングでPlay()
‘エフェクト名’.Play();
3.Unityのインスペクターから直接ドラッグ&ドロップ
覚えれば結構簡単ですね!
エフェクトのコツを掴んでゲームを面白く!
エフェクトが使われる場面の紹介に始まり、エフェクト自作の罠についておさえ、エフェクトを実装する方法を学ぶところまでやってきました。
今回の記事をしっかり押さえれば、エフェクトを使って効率的にゲームの演出をすることができるようになるかと思います。
ぜひ今回の内容を活用していただければ幸いです!