public bool IsVFXAlive { get { return playing || VFX.aliveParticleCount > 0; } } void Awake() { VisualEffectSpawnerCallbacks.OnVFXPlay += OnVFXPlay; VisualEffectSpawnerCallbacks.OnVFXStop += OnVFXStop; VisualEffectSpawnerCallbacks.OnVFXUpdate += OnVFXUpdate; } void OnDestroy() { VisualEffectSpawnerCallbacks.OnVFXPlay -= OnVFXPlay; VisualEffectSpawnerCallbacks.OnVFXStop -= OnVFXStop; VisualEffectSpawnerCallbacks.OnVFXUpdate -= OnVFXUpdate; } private void OnVFXPlay(VisualEffect vfxComponent, VFXSpawnerState state, bool isEndSpawner) { if (vfxComponent.GetInstanceID() != VFX.GetInstanceID()) return; playing = true; looping = looping || state.loopState == VFXSpawnerLoopState.Looping; } private void OnVFXStop(VisualEffect vfxComponent, VFXSpawnerState state, bool isEndSpawner) { if (vfxComponent.GetInstanceID() == VFX.GetInstanceID() && isEndSpawner) playing = false; } private void OnVFXUpdate(VisualEffect vfxComponent, VFXSpawnerState state, bool isEndSpawner) { if (vfxComponent.GetInstanceID() != VFX.GetInstanceID()) return; //TODO: do update logic here... }