Files

56 lines
4.3 KiB
Markdown

# Effects Engine — シーンのためのアニメーション視覚エフェクト
Effects Engine は、シナリオがシーンの上に短い視覚エフェクトを再生できるようにします。閃光、煙、火花、魔法の輝きなどです。エフェクトとは、MOD が自分の `effects/` フォルダーに入れて配る小さな Godot シーンのこと。シナリオが名前で呼び出すと画面に現れ、自分で終わるかダイアログが終わるまで表示され続けます。
単独では何も見せないエンジン MOD です。現在収録されているゲームはエフェクトシーンをまだ一つも同梱していないため、プレイ中にエフェクトに出会うことはありません。この MOD は、エフェクトを追加したい作者のためのものです。
## エフェクトはどう現れるか
1. シナリオの行 `effect <名前>` が実行されます。
2. Effects Engine が読み込み済みの MOD の中から `effects/<名前>.tscn` を探します。
3. エフェクトはシーンの絵の上、つまり背景やその物体より上、ダイアログボックスより下に置かれ、再生されます。
4. 呼び出したダイアログが終わると、先に自分で消えていない限り、エフェクトは取り除かれます。
シナリオはエフェクトを待ちません。次の行はすぐに表示されます。
## 作者向け:エフェクトを追加する
エフェクトのシーンを MOD に入れます:
```filestree
my_mod/
└── effects/
└── sparks.tscn
```
シナリオから呼び出します:
```scenario
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 <名前>` で現れ、ダイアログが終わると消えます。
## うまく動かないとき
1. **何も現れず、ログにエフェクトが見つからないと出る。** ファイルは、ゲームに含まれる MOD の `effects/<名前>.tscn` として存在し、シナリオの名前と一致していなければなりません。
2. **開発中は動くのに、プレイヤー環境では動かない。** MOD が `.zip` として公開されています。フォルダーとして公開してください。
3. **エフェクトが消えない。** ダイアログが終わるまで残ります。ダイアログを終えるか、フレームセットやスプライトシートの積み木でエフェクトを作ってください。それらは終わると自分を消します。