protected EnvironmentalNoiseParameter[] _environmentalNoiseParameters; private UpdateParam[] _updateParams; private float _currentDelay; private float _targetDelay; private int _paramIndex; private void Update() { if (!IsPlaying) return; if(_updateParams.Length <= 0) return; if (_paramIndex < 0) _paramIndex = 0; _targetDelay = _updateParams[_paramIndex].Delay; Debug.LogError( $"Name - {_updateParams[_paramIndex].Name}, Value - {_updateParams[_paramIndex].Value} Delay - {_updateParams[_paramIndex].Delay}"); if (_currentDelay < _targetDelay) { _currentDelay += Time.deltaTime; } else { var param = _soundEventEmitter.Params.Single(p => p.Name == _updateParams[_paramIndex].Name); var envParam = _environmentalNoiseParameters.Single(p => p.ParameterName == _updateParams[_paramIndex].Name); param.Value = _updateParams[_paramIndex].Value; _soundEventEmitter.SetParameter(param.Name, param.Value); _soundEventEmitter.EventInstance.release(); _updateParams[_paramIndex].Value = Random.Range(envParam.ParameterValueRangeMin, envParam.ParameterValueRangeMax); _updateParams[_paramIndex].Delay = Random.Range(envParam.FrequencyRangeMin, envParam.FrequencyRangeMax); _paramIndex++; if (_paramIndex >= _updateParams.Length) { _paramIndex = 0; _currentDelay = 0f; _updateParams = _updateParams.OrderBy(p => p.Delay).ToArray(); } } }