Spawn
メニューパス : Context > Spawn
スポーンコンテキストは、システムがインスタンスをいくつ Initialize コンテキストに流すかを制御します。このコンテキストはビルトインブロック一式を使って、スポーンレートを制御します。また VFXSpawnerCallbacks を実装し、カスタム動作を作成することもできます。
このコンテキストは、スポーンループ内でパーティクルをスポーンします。処理するループ数、各ループの期間、および各ループの前後に遅延を入れるかどうかは、指定することができます。
Context 設定
設定 | Type | 説明 |
---|---|---|
Loop Duration | Enum | (Inspector) コンテキストがパーティクルを生成する期間を特定します。オプションは以下の通りです。 • Infinite: パーティクルを継続的に生成します。 • Constant: 指定した特定の期間、パーティクルを生成します。その後、Delay Mode が After Loop または Before And After Loop に設定されていれば、コンテキストはパーティクルのスポーンを一時停止します。この一時停止後の動作は、Loop Count および Delay Mode によって異なります。 • Random: 最小と最大値間のランダムな期間、パーティクルを生成します。その後、Delay Mode が After Loop または Before And After Loop に設定されていれば、コンテキストは パーティクルのスポーンを一時停止します。この一時停止後の動作は、Loop Count および Delay Mode によって異なります。 |
Loop Count | Enum | (Inspector) コンテキストがループする回数を特定します。各ループの間に、コンテキストがパーティクルスポーンをトリガーします。オプションは以下の通りです。 • Infinite: 無限にループします。 • Constant: 特定の回数だけループします。 • Random: 最小と最大値の間の、ランダムな回数だけループします。 |
Delay Mode | Enum | (Inspector) ループのどこでコンテキストが遅延を処理するかを特定します。オプションは以下の通りです。 • None: 遅延を処理しません。 • Before Loop: スポーンループの前に遅延を処理します。 • After Loop: スポーンループの後で遅延を処理します。 • Before And After Loop: スポーンループの前後に遅延を処理します。 |
Delay Before Random | Bool | (Inspector) スポーンループ前の遅延が、最小値と最大値の間のランダムな値か、それとも一定値かを切り替えます。 この設定は、Delay Mode を Before Loop または Before And After Loop に設定したときのみ表示されます。 |
Delay After Random | Bool | (Inspector) スポーンループ後の遅延が、最小値と最大値の間のランダムな値か、それとも一定値かを切り替えます。 この設定は、Delay Mode を After Loop または Before And After Loop に設定したときのみ表示されます。 |
Context プロパティ
設定 | Type | 説明 |
---|---|---|
Loop Duration | float/Vector2 | スポーンループの期間です。 このプロパティは、Loop Duration を Constant または Random に設定したときのみ表示されます。 |
Loop Count | int/Vector2 | 初期ステートに戻る前に、コンテキストがいくつのループを処理するかを定義します。 このプロパティは、Loop Count を Constant または Random に設定したときのみ表示されます。 |
Delay Before | float/Vector2 | スポーンループ前の遅延期間です。 このプロパティは、Delay Before Random を有効にしたときのみ表示されます。 |
Delay After | float/Vector2 | スポーンループ後の遅延期間です。 このプロパティは、Delay After Random を有効にしたときのみ表示されます。 |
Flow
ポート | 説明 |
---|---|
Start | Event、GPU イベント、または別のスポーンコンテキストからの接続です。 |
Stop | Event、GPU イベント、または別のスポーンコンテキストからの接続です。 |
SpawnEvent | Initialize コンテキスト または別の Spawn コンテキストへの接続です。 |
補足
システムライフサイクル
ループおよび遅延システムについては、下の図を参照してくださ
ループフェーズのライフサイクルは、スポーンコンテキストが内部処理する 状態 に分けられます。ライフサイクルは以下の通りです。
ステップ | 状態 |
---|---|
1. 初期状態 | スポーンコンテキストの初期状態は VFXSpawnerLoopState.Finished です。このステージでは、コンテキストは Start フロー入力がトリガーするのを待機しています。VisualEffect.Play を呼び出すと起こります。 |
2. OnPlay | Start フロー入力がトリガーする際に [カスタムスポーナーコールバック] があると、コンテキストは VFXSpawnerCallbacks.OnPlay をトリガーします。スポーンコンテキストはグラフを評価し、ループ数 を設定します。その後、次のステップに進みます。 |
3. 遅延期間のリセット | スポーンコンテキストがグラフを評価し、以下を初期化します。 • delayBeforeLoop 時間。 • loopDuration 時間。 • delayAfterLoop 時間。 その後、totalTime をゼロに設定して次のステップへ進みます。 |
4. ループ前の待機 | loopState から DelayingBeforeLoop に移行します。 この段階では、totalTime が delayBeforeLoop を下回る間は、コンテキストは待機します。 totalTime が delayBeforeLoop を超過すると、コンテキストは totalTime をゼロに設定して次のステップへ進みます。 |
5. Looping | loopState から Looping へ移行し、コンテキストは playing を true に設定します。 この段階では、totalTime が loopDuration を下回る間、スポーンコンテキストが内部のスポーンブロックを評価し、パーティクルを生成します。 totalTime が loopDuration を超過すると、コンテキストは totalTime をゼロに設定して次のステップへ進みます。 |
6. ループ後の待機 | loopState から DelayingAfterLoop に移行します。 この段階では、totalTime が delayAfterLoop を下回る間は、コンテキストは待機します。 totalTime が delayBeforeLoop を超過すると、コンテキストは totalTime をゼロに設定して次のステップへ進みます。 |
7. 最終ステートの検証 | 最後に、コンテキストは loopIndex をインクリメントします。新しい loopIndex が loopCount よりも少ない場合、ライフサイクルはステップ 3 に戻ります。そうでなければ、初期のステップ 1 へ戻り、新たな Start フロー入力トリガーを待ちます。 |
Spawn コンテキストのリンク
スポーンコンテキストは、入力イベントを用いてオンとオフに切り替えるのが、標準的な方法です。スポーンコンテキストの Start 入力フロースロットに入力がない場合は、Visual Effect Graph は暗示的に “OnPlay” イベントに接続します。さらに、スポーンコンテキストの Stop 入力フロースロットに入力がない場合は、Visual Effect Graph は暗示的に “OnStop” イベントに接続します。
スポーンコンテキストのオンとオフを切り替えるもう 1 つの方法は、別のスポーンコンテキストにリンクさせることです。これを実行するには、スポーンコンテキストの SpawnEvent 出力フロースロットを、別のスポーンコンテキストの Start 入力フロースロットにリンクします。その場合、イベント属性ステートは、最初のスポーンコンテキストから 2 つめのコンテキストに自動転送されます。その後、最初のスポーンコンテキストの Start および Stop 入力フロースロットに接続し、繋げたコンテキストのオンとオフを切り替えます。