public sealed override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { if (state.totalTime < m_LastTime) { // We got reset shomehow (loop and delay?) Reset(vfxValues.GetFloat(startTimePropertyID), vfxValues.GetFloat(durationPropertyID), vfxValues.GetUInt(countPropertyID), state.totalTime); } if (state.deltaTime > 0.0f && m_Remaining >= 0 && state.totalTime > m_StartTime) { float frameRatio = Mathf.Clamp01((state.totalTime - m_StartTime) / state.deltaTime); // How much of the entirety of a frame did we elapse float count = Mathf.Min(m_Remaining, frameRatio * m_Rate * state.deltaTime); m_Remaining -= count; m_Incoming += count; int toSpawn = (int)Mathf.Floor(m_Incoming); state.spawnCount += toSpawn; m_Incoming -= toSpawn; } m_LastTime = state.totalTime; }
public override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { state.spawnCount = Mathf.Min(state.spawnCount, vfxValues.GetUInt(maxSpawnPerFrameName)); }
public sealed override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { Reset(vfxValues.GetFloat(startTimePropertyID), vfxValues.GetFloat(durationPropertyID), vfxValues.GetUInt(countPropertyID)); }
public override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) { m_Index = (m_Index + 1) % Math.Max(1, vfxValues.GetUInt(stripMaxCountID)); state.vfxEventAttribute.SetUint(stripIndexID, m_Index); }