using UnityEngine; using UnityEngine.VFX; namespace RR.Game2D.FX { public class AmbientVFXController : MonoBehaviour { [SerializeField] private VisualEffect vfx; private VisualEffectAsset _currentVFXAsset; private void Start() { // Инициализация VFX компонента и установка текущего эффекта _currentVFXAsset = null; if (!vfx) vfx = GetComponent(); SetVFXAsset(vfx.visualEffectAsset); // Воспроизведение текущего VFX эффекта при старте PlayCurrentVFX(); } /// /// Метод для воспроизведения текущего VFX эффекта /// private void PlayCurrentVFX() { // Если VFX компонент или текущий эффект не установлены, выходим из метода if (!vfx) return; if (!_currentVFXAsset) return; vfx.Play(); } /// /// Метод для остановки текущего VFX эффекта /// private void StopCurrentVFX() { vfx.Stop(); } /// /// Метод для установки нового VFX эффекта /// /// Новый VFX эффект public void SetVFXAsset(VisualEffectAsset newVFXAsset) { // Если новый эффект совпадает с текущим, выходим из метода if (newVFXAsset == _currentVFXAsset) return; StopCurrentVFX(); // Обновление текущего эффекта и установка его в VFX компонент _currentVFXAsset = newVFXAsset; vfx.visualEffectAsset = _currentVFXAsset; // Если новый эффект не установлен, выходим из метода if (!newVFXAsset) return; PlayCurrentVFX(); } } }