4.3 KiB
4.3 KiB
Effects Engine — シーンのためのアニメーション視覚エフェクト
Effects Engine は、シナリオがシーンの上に短い視覚エフェクトを再生できるようにします。閃光、煙、火花、魔法の輝きなどです。エフェクトとは、MOD が自分の effects/ フォルダーに入れて配る小さな Godot シーンのこと。シナリオが名前で呼び出すと画面に現れ、自分で終わるかダイアログが終わるまで表示され続けます。
単独では何も見せないエンジン MOD です。現在収録されているゲームはエフェクトシーンをまだ一つも同梱していないため、プレイ中にエフェクトに出会うことはありません。この MOD は、エフェクトを追加したい作者のためのものです。
エフェクトはどう現れるか
- シナリオの行
effect <名前>が実行されます。 - Effects Engine が読み込み済みの MOD の中から
effects/<名前>.tscnを探します。 - エフェクトはシーンの絵の上、つまり背景やその物体より上、ダイアログボックスより下に置かれ、再生されます。
- 呼び出したダイアログが終わると、先に自分で消えていない限り、エフェクトは取り除かれます。
シナリオはエフェクトを待ちません。次の行はすぐに表示されます。
作者向け:エフェクトを追加する
エフェクトのシーンを MOD に入れます:
my_mod/
└── effects/
└── sparks.tscn
シナリオから呼び出します:
text "ランプが瞬いた。"
effect sparks
text "暗闇で何かが動いた。"
end
MOD はフォルダーであること。 Godot のシーンは、フォルダーとしてインストールされた MOD からしか読み込めません。.zip アーカイブで配られた MOD のエフェクトはスキップされ、ログに警告が残ります。
エフェクトシーンの積み木
Effects Engine は、エフェクトシーンの中でフレームをアニメーションさせる方法を三つ用意しています:
- クロスフェードつきフレームセット —
EffectDataSetスクリプトのついたノード、フレーム画像のリスト、そしてフレームからフレームへ溶かしてつなぐAnimationController。速度とフェード時間はインスペクターで設定します。フレームは一度だけ再生され、エフェクトは自分で消えます。 - シェーダー内のスプライトシート —
EffectAnimatorが、フレームシート素材のついたTextureRectを決められた枚数だけ決められた時間で進めます。 - シェーダーなしのスプライトシート —
EffectAnimNodeが横一列のスプライトシートを送り(フレーム幅 = シート幅 ÷ 枚数)、終わりで自分を消します。コードからEffectAnimNode.SpawnOn(target, sheet, frameCount, seconds)で作ることもできます。
フレームセットとコードだけで済むスプライトシートはシーンいっぱいに引き伸ばされるので、シーンのサイズに合わせて描いたフレームは背景とぴったり重なります。
コードなしの最初のエフェクト
一番簡単なエフェクトは、ルートが TextureRect のシーンに画像一枚を全画面に引き伸ばして置くだけのものです。たとえば半透明の輝き。effect <名前> で現れ、ダイアログが終わると消えます。
うまく動かないとき
- 何も現れず、ログにエフェクトが見つからないと出る。 ファイルは、ゲームに含まれる MOD の
effects/<名前>.tscnとして存在し、シナリオの名前と一致していなければなりません。 - 開発中は動くのに、プレイヤー環境では動かない。 MOD が
.zipとして公開されています。フォルダーとして公開してください。 - エフェクトが消えない。 ダイアログが終わるまで残ります。ダイアログを終えるか、フレームセットやスプライトシートの積み木でエフェクトを作ってください。それらは終わると自分を消します。