단일/주기적 버스트
메뉴 경로:
- Spawn > Single Burst
- Spawn > Periodic Burst
Single/Periodic Burst 블록은 한 번만 즉시 또는 지연을 사용하여 주기적으로 여러 개의 파티클을 생성합니다. 이 블록이 파티클 버스트를 생성하도록 트리거하면 spawnCount가 즉시 증가합니다. Repeat 설정을 Periodic으로 변경하면 이 블록은 해당 이름을 Periodic Burst로 변경하고 지연 후 여러 파티클 버스트를 생성합니다.
블록 호환성
이 블록은 다음 컨텍스트와 호환됩니다.
블록 설정
설정 | 타입 | 설명 |
---|---|---|
Repeat | 열거형 | (인스펙터) 이 블록이 탄생을 한 번만 트리거할지, 하루 후에 반복할지 결정하는 데 사용하는 모드입니다. 옵션은 다음과 같습니다. • Single: 블록이 파티클의 단일 버스트를 생성합니다. • Periodic: 블록이 여러 파티클 버스트를 생성합니다. 파티클 버스트를 생성한 후 Delay에서 지정한 시간 동안 기다렸다가 또 다른 버스트를 생성합니다. |
Spawn Mode | 열거형 | 이 블록이 생성할 파티클 수를 결정하는 데 사용하는 모드입니다. 옵션은 다음과 같습니다. • Constant: 이 블록은 특정 수의 파티클을 생성합니다. Count 프로퍼티에서 이 숫자를 설정할 수 있습니다. • Random: 이 블록이 두 경계 사이에 무작위 수의 파티클을 생성합니다. 이 모드를 선택하면 Count 프로퍼티는 x축은 하나의 경계 값을 나타내고 y축은 다른 하나의 경계 값을 나타내는 Vector 2가 됩니다. |
Delay Mode | 열거형 | 이 블록이 버스트 사이에 사용할 지연 시간의 계산 방법을 결정하는 데 사용하는 모드입니다. 옵션은 다음과 같습니다. • Constant: 지연 시간이 특정 지속 시간입니다. Delay 프로퍼티에서 지속 시간을 설정할 수 있습니다. • Random: 지연 시간이 두 경계 사이의 무작위 지속 시간입니다. 이 모드를 선택하면 Delay 프로퍼티는 x축은 하나의 경계 값을 나타내고 y축은 다른 하나의 경계 값을 나타내는 Vector 2가 됩니다. |
블록 프로퍼티
입력 | 타입 | 설명 |
---|---|---|
개수 | float/Vector2 | 생성할 파티클 수입니다. Spawn Mode를 Constant로 설정하면 이 프로퍼티는 플로트 타입이고, 설정한 값은 생성할 파티클의 특정 개수입니다. Spawn Mode를 Random으로 설정하면 이 프로퍼티는 x축은 하나의 경계 값을 나타내고 y축은 다른 하나의 경계 값을 나타내는 Vector 2가 됩니다. 파티클 버스트를 생성할 때 이 블록은 이 두 값 사이의 무작위 수를 사용하여 생성할 파티클 수를 결정합니다. |
Delay | float/Vector2 | 이 블록이 파티클 버스트를 생성하기 전에 대기하는 지연 시간입니다. Delay Mode를 Constant로 설정하면 이 프로퍼티는 플로트 타입이고, 설정한 값은 이 블록이 파티클 생성 간에 대기하는 특정 지연 시간입니다. Delay Mode를 Random으로 설정하면 이 프로퍼티는 x축은 하나의 경계 값을 나타내고 y축은 다른 하나의 경계 값을 나타내는 Vector 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)
{
}
}