見出し画像

Effekseerで作ったエフェクトをUnreal Engine 4で使う

無料のエフェクト制作ツール「Effekseer」で作ったエフェクトを、Unreal Engine 4で使う方法(スポーンで表示させる)と、気を付けたいポイント(自動削除されないことへの対処法)をまとめました。
この記事では、Unreal engine のBluePrintの基礎部分や、Effekseer自体の使い方は解説しないので、二つともをある程度理解している方向けの内容です。
ただ、筆者のUnreal Engine理解度は初心者程度で、エフェクト制作も最近勉強し始めたので、上級者の方からするとおかしいところもあるかも知れません。オテヤワラカニオネガイシマス。

Effekseerとは?

Effekseerとは、無料でオープンソースのエフェクト制作ツールです。
Unreal Engine 4にもCascadeというパーティクルを作る機能はあり、そちらももちろん本格的なエフェクト制作ができるのですが、Effekseerで作ったエフェクトはUnreal Engine 4だけでなく、Unity等の他のゲームエンジンでも使用が可能です。
そして、何と言ってもひとつひとつの機能がすごくわかりやすく、取っつきやすさが抜群にいいので、これからエフェクトを自分でも作りたい、という方にオススメです。

Unreal Engineで使うには

基本的には、公式のヘルプの手順を踏むだけで、Effekseerで作ったエフェクトをUnreal Engine上で表示させることが可能です。

自分で使ってみて気付いたことや、気を付けたいことを以下にまとめました。

Effekseer Emitterをスポーンさせる

上記公式のヘルプに書かれている使い方は、
・Effekseer Emitterをレベル上に配置して「Effect」を指定する
・BP_EffekseerEmitterを他のアクターにコンポーネントとして追加する
・アニメーション通知で使用する(筆者はアニメーション通知について理解できていない)
の3種類ですが、BP_EffekseerEmitterをスポーンさせてエフェクトを表示させることも可能です。
まず、Spawn Actorのノードを作成し、クラスにはBP_EffekseerEmitterを指定します。

画像1

Spawn Transformには出したい位置のTransformを入れてください。
次に、出力側のReturn Valueからドラッグして検索バーに「EffekseerEmitter」と入力しますが、「状況に合わせた表示」のチェックを外して、上の方にスクロールしてBP Effekseer Emitterの「Get Effekseer Emitter」のノードを作成します。

画像2

これで、「BP_EffekseerEmitter」の中にある「EffekseerEmitterコンポーネント」をGetすることができました。

画像3

Get Effekseer Emitterの出力からドラッグし、「状況に合わせた表示」はオフのまま、検索バーに「Effect」と入力し、「Effekseer Emitter Component」の中の「Set Effect」を選択します。

画像4

画像5

あとは、Spawn ActorとSet Effectのノードを繋げば、ブループリント上からEffekseerのアセットを指定してEffekseer Emitterをスポーンさせることができます。

上記のスポーンさせる方法でエラーが出る場合

この方法でエフェクトを表示させていたら、下記のようなエラーが出る場合があります。
自分の場合はこれで調子よくたくさんエフェクトを出していたら、ほぼ確実に出ました。

画像6

これはググって下記のAnserHubに辿り着いたのですが、アクターがまだorもうないのに何らかの参照をしようとすると出てくるエラーのようです。

たぶん、スポーンさせた瞬間に「Set Effect」をしているのが原因かと思います。
でもエフェクトの表示は問題なくされているんですよね。謎です。
ともあれこのエラーは直したいので、先ほどのブループリントに戻って、Spawn ActorとSet Effectの間に「Is Valid」のノードを追加し、Is Validだった時だけSet Effectするようにします。
なんだか説明がルー大柴みたいになって来ましたが、これはブループリントあるあるだと思います。

画像7

Is ValidのInput Objectには、Spawn ActorのReturn Valueを繋ぐようにします。
これで、先ほどのエラーは出なくなります。
これが、BP_EffekseerEmitterをスポーンさせてエフェクトを表示させる方法です。

BP_EffekseerEmitterは自動で消えない

ここからはEffekseerで作ったエフェクトをUnreal Engine 4で使う際に気を付けたいポイントです。
BP_EffekseerEmitterは自動では消えません。
上記の通り、スポーンでたくさんエフェクトを出していたところ、アクター数が減らないことに気付き発覚しました。
これについてTwitterでツイートしたところ、公式Twitterに拾っていただき、対処法を教えていただくことができました。
本当にありがとうございます。

とのことなので、BP_EffekseerEmitter自体のブループリントを下記の通り編集しました。(説明は端折ります!)

画像8

Tickで毎フレームEffekseerEmitterコンポーネントがExistsではないかどうかを監視しますが、スポーンした瞬間はコンポーネントがまだ存在しないことになっているみたいなので、スポーンしてから1秒経過したことも条件に入れて、この二つの条件を満たしたらDestroy Actorするようにしました。
これで、エフェクトの再生が終了したらアクターを自動で削除、が実現しました。
この辺のコンポーネントの扱いとかExistsの使い方とか、詳しい方がいたらアドバイスいただきたいです。
考えてみると、BP_EffekseerEmitterはただの入れ物で、エフェクトの表示もあくまで変数で指定しているだけなので、自動で削除したい!という要望の方が特殊なような気がしてきました。

Effekseerで作った時と同じフォルダ構造にする

Effekseerでエフェクトを作成する際にテクスチャ素材を読み込んでいる場合、Effekseerで読み込んだ際と同じフォルダ構造にする必要があります。
これはUnityで使う時でも同じです。

おわり

以上です。
繰り返しになりますが、Effekseerは本当にひとつひとつの機能がわかりやすくて取っつきやすく、それでいてテクスチャーノードが使えたり、Effekseer内だけで簡単なプロシージャルモデリングも出来てしまったり、本格的なエフェクト制作にも耐えうる機能を持っています。
実際に市販のゲームで採用されている例も多数存在します。
これからエフェクト制作を勉強したい方にも超オススメです!
今回の記事が誰かの何かの役に立てば幸いです。

この記事が気に入ったらサポートをしてみませんか?