プレイヤーが攻撃を受けた時にエフェクトを表示する【Unity】

今回は、Unityちゃんが攻撃を受けた時のエフェクトを作成したいと思います。

今のところ、スライムしか敵がいないので、スライムに当たったらパーティクルシステムを使ってエフェクトを表示します。

スポンサーリンク

プレイヤーが攻撃を受けた時のエフェクトを作成しよう

エフェクト画像

まずは、エフェクトとして使う透過pngの画像を準備しましょう。

上の画像を見たら分かると思いますが、ペイントを使って自作しました。手抜きすぎぃ。

マテリアルを作る

画像をインポートしたら、新しいマテリアルを作りましょう。

マテリアルを選択して「Shader」を「Particles/Priority Additive」に変更します。

先ほど用意した画像を「Particle Texture」にドラッグ&ドロップ。

パーティクルシステムの作成

ヒエラルキーウィンドウから右クリックし「Effects」から「Particle System」を選択。

Rendererタブを開いて「Material」に先ほど作ったマテリアルを設定します。

ダメージエフェクトのパーティクル設定

パーティクルの設定は上の画像のようにしてみました。

スライムに衝突時、一瞬エフェクトを表示するイメージです。

作成したパーティクルはプレハブ化しましょう。

スクリプトからパーティクルを制御する

コリジョンが発生した時に、衝突した座標を検知して、その場所にエフェクトを表示するスクリプトを作ります。

エフェクトを表示するスクリプト

ほとんどの処理をプレイヤーコントローラーに書いていたので、パーティクルの処理はスライムコントローラーに書くことにしました。

コリジョンが発生して対象がUnityちゃんだったらエフェクト発動。Unityちゃんには「Player」というタグを付けておきます。

衝突した座標の検知には「ContactPoint」を使う事にします。

スクリプトを保存したらエフェクトのプレハブにアタッチしましょう。

敵に当たるとエフェクトを表示する

動作確認してみましたが、結構一瞬ですね。もう少しかっこいい素材を使っていれば見た目も変わってくるんでしょうけどね。

欠点としては、衝突時にエフェクトが発生するのみなので、敵と接触し続けている間はエフェクトが発生しない所ですかね。まぁ接触し続けるとゲームオーバーになるので理にかなってるかな。

エフェクトを削除するスクリプトを作成

一応オブジェクトになるので、溜まりすぎるのを避けるために、オブジェクトを削除するスクリプトを作成しておきます。

エフェクトを削除するスクリプト

Invokeを使って0.5秒後にオブジェクトを削除しています。

このスクリプトをパーティクルプレハブに設定すれば良いですね。

Unityちゃんに攻撃手段がないので、ダメージを受けた時のエフェクトを作成しましたが、Unityちゃんにも攻撃要素を持たせるようになったら、その都度エフェクトを作りたいと思います。