Godot + Effekseer メモ(2D)
Effekseerとは
各種ゲームエンジンで利用できるエフェクト作成ツール。
配布されているサンプルエフェクトもCC0。
多数の商用ゲームで採用された実績。
Unity, Unreal Engine など各種ゲームエンジンで利用できるプラグインも配布。
もちろんGodot用もある。
プラグインの導入
まず本体をダウンロード。動かしてみてなんとなくわかる。わかっておくこと。 同じページの Effekseer for GodotEngine をダウンロード。いまからやるならGodot 4.x用だろう。
Godotで新規プロジェクトを作成。
ファイルシステムのres://を右クリしてファイルマネージャー(つまりエクスプローラ)で開く。
プロジェクトファイルproject.godotがあるフォルダにaddonsフォルダが置かれるように、ダウンロードしたファイルを展開する。
Godotに戻るといくつかエラーが出るかもしれないが無視して、プロジェクト>プロジェクト設定>プラグイン>Effekseer for Godotの列のステータス□有効のチェックを入れる。入ったら閉じるボタンをおしてダイアログを閉じる。
ここで一旦、プロジェクト>「終了してプロジェクト一覧を開く」を選択、あるいはGodotを閉じて再起動する。同じプロジェクトを開き直す。
エフェクトさせてみる
戻ったらファイルシステムのres://を右クリしてファイルマネージャー(つまりエクスプローラ)で再度開く。
プロジェクトファイルproject.godotがあるフォルダにeffectsフォルダを作成。そのフォルダの中に、Effekseer本体(プラグインじゃなくて本体)のSampleフォルダ内の…たとえば00_Basicフォルダを丸ごとコピーする。実際はどれでもいいがとりあえず。
Godotに戻るとFBX2glTFが無いと言われるかもしれない。その場合、ここからFBX2glTF-windows-x64.exeをダウンロード、適当なフォルダ(なるべくプロジェクトフォルダの外にあるほうがいい気がする)に置いて、そのパスを指定。 新規2Dシーン(Node2D)作成。その下に新しいノードを追加(+ボタンかCtrl+A)する形でCamera2Dを追加。さらに、EffekseerEmitter2Dを追加する。
インスペクターをみるとEffeckeerEmitter2DのEffectプロパティが空になっているので、クリックして(すごい量のリストが出てくるが)下のほうにある「読み込み」を選択。ダイアログで、先程コピーしたeffecs/00_Basicフォルダ内の適当な*.efkefcを選択。
ファイルシステムパネルから*.efkefcファイルをドラッグしてもOK。
選択したあと、今設定したファイル名をクリックして開くとプレビュー再生でエフェクトの内容を確認できる。
またエディター設定でEffekseer本体exeのパスを指定しておくと、プレビュー画面から直接Effekseer本体を起動できる。
デフォルトだと非常に小さいので、EffekseerEmitter2DのNode2D>TransformのScaleを10~30とかにする。
F6を押して実行すると、なんらかのエフェクトが表示されるはず。(デフォルトでAutoPlayがオンになっているので)
1回しか表示されないので、何度も表示させたいなら、Node2Dに新規スクリプトをアタッチ、_processを以下のように書き換える。これでスペースキーを押すたびにエフェクトが発生する。
code:gd
func _process(delta: float) -> void:
if Input.is_action_just_pressed("ui_accept"):
$EffekseerEmitter2D.play()
Laser01を再生してもレーザーが伸びていかないことに気づく。プレビューを確認すると、Z軸方向にレーザーが伸びていることがわかるが、Godotの2Dモードの場合Z軸はすなわち画面手前を指しているので正面から観ると見えないのだ。X軸方向にレーザーを飛ばしたければ、OrientationのYに90と入力しよう。
Effekseerで2Dゲーム用エフェクトを作る場合は、Z軸からXY平面上を見て見栄えがするように作ろう。
スクリプトから制御する
プロパティ
effect: 再生するエフェクト
code:gd
$EffekseerEmitter2D.effect = load(effect_path)
autoplay: 自動再生
trueだとready後に再生開始。ループはしない
Speed エフェクトの再生速度を設定します
Color エフェクトの色を設定します
Orientation エフェクトの向きを設定します
メソッド
play() / stop() / is_playing(): 再生 / 停止 / 再生中かを調べる(bool)
send_trigger(int index): トリガーを送信(トリガーとはなんぞやはEffekseer本体のヘルプを参照)
シグナル
finished(): 再生終了したら発火