Single/Periodic Burst
メニューパス:
- Spawn > Single Burst
- Spawn > Periodic Burst
Single/Periodic Burst Block は、パーティクルを即時に 1 回、または遅延を使って周期的に発生させます。このブロックがパーティクルの発生をトリガーすると、瞬時に spawnCount を増加させます。Repeat 設定を Periodic に変更すると、このブロックの名前が Periodic Burst に変わり、遅延の後でパーティクルを発生するようになります。
ブロックの互換性
このブロックは、以下のコンテキストと互換性があります。
ブロックの設定
| 設定 | Type | 説明 |
|---|---|---|
| Repeat | Enum | (Inspector) 発生を 1 回のみにするか、または遅延の後で繰り返すかを決定するために、このブロックが使うモードです。オプションは以下の通りです。 • Single: ブロックはパーティクルを 1 回発生させます。 • Periodic: ブロックはパーティクルを複数回発生させます。一度パーティクルを発生させた後、Delay で指定した時間だけ待ってから、再び発生させます。 |
| Spawn Mode | Enum | 発生させるパーティクルの数を決定するために、このブロックが使うモードです。オプションは以下の通りです。 • Constant: ブロックは一定数のパーティクルを発生させます。数は Count プロパティで設定します。 • Random: ブロックは 2 つの境界間のランダムな数のパーティクルを発生させます。このモードを選択すると、Count プロパティは、x-軸 と y-軸がそれぞれの境界値を示す Vector 2 になります。 |
| Delay Mode | Enum | バースト間の遅延時間の計算方法を決定するために、このブロックが使うモードです。オプションは以下の通りです。 • Constant: 遅延時間は一定の期間になります。期間は Delay プロパティで設定します。 • Random: 遅延時間は 2 つの境界間のランダムな時間になります。このモードを選択すると、Delay プロパティは、x-軸 と y-軸がそれぞれの境界値を示す Vector 2 になります。 |
ブロックのプロパティ
| 入力 | Type | 説明 |
|---|---|---|
| count | float/Vector2 | 発生させるパーティクルの数です。 Spawn Mode を Constant に設定する場合、このプロパティは float タイプで、設定する値は発生させたいパーティクルの特定数です。 Spawn Mode を Random に設定すると、このプロパティは、x-軸 と y-軸がそれぞれの境界値を示す Vector 2 になります。パーティクルが発生する際、ブロックはこの 2 つの値の間のランダムな数字を使って、発生させるパーティクルの数を決定します。 |
| Delay | float/Vector2 | ブロックがパーティクルを発生させる前に待つ、遅延時間です。 Delay Mode を Constant に設定する場合、このプロパティは float タイプで、設定する値はブロックがパーティクル発生間に待機する、遅延時間です。 Delay Mode を Random に設定すると、このプロパティは、x-軸 と y-軸がそれぞれの境界値を示す Vector 2 になります。ブロックが遅延を開始する際、ブロックはこの 2 つの値の間のランダムな数字を使って、遅延を開始します。 |
注意
シングルバーストの動作は、以下にあげる同等のカスタムスポーナーコールバックの実装で模倣することができます。
class SingleBurstEquivalent : VFXSpawnerCallbacks
{
public class InputProperties
{
public float Count = 1.0f;
public float Delay = 2.0f;
}
static private readonly int countID = Shader.PropertyToID("Count");
static private readonly int delayID = Shader.PropertyToID("Delay");
public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
{
}
private float m_NextBurstTime;
private bool m_Sleeping;
public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
{
if (state.newLoop)
{
m_NextBurstTime = vfxValues.GetFloat(delayID);
m_Sleeping = false;
}
if (!m_Sleeping && state.playing && state.totalTime >= m_NextBurstTime)
{
state.spawnCount += vfxValues.GetFloat(countID);
m_Sleeping = true;
}
}
public sealed override void OnStop(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
{
}
}
ピリオディックバーストの動作は、以下にあげる同等のカスタムスポーナーコールバックの実装で模倣することができます。
class PeriodicBurstEquivalent : VFXSpawnerCallbacks
{
public class InputProperties
{
public float Count = 1.0f;
public float Delay = 2.0f;
}
static private readonly int countID = Shader.PropertyToID("Count");
static private readonly int delayID = Shader.PropertyToID("Delay");
public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
{
}
private float m_NextBurstTime;
public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
{
if (state.newLoop)
{
m_NextBurstTime = vfxValues.GetFloat(delayID);
}
if (state.playing && state.totalTime >= m_NextBurstTime)
{
m_NextBurstTime += vfxValues.GetFloat(delayID);
state.spawnCount += vfxValues.GetFloat(countID);
}
}
public sealed override void OnStop(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent)
{
}
}