示例#1
0
    /**********************************************************************************/
    // воспроизводим звуковой эффект по ключу
    //
    /**********************************************************************************/
    public void PlaySound(string SoundKey)
    {
        if (!m_soundEffectCollection.ContainsKey(SoundKey))
        {
            Debug.LogError("We have no such music! Key: " + SoundKey);
            return;
        }

        // проверяем таймера
        if (m_soundTimers[SoundKey] > 0.0f)
        {
            // если таймер ещё не отработал - отправляем звук в очередь и выходим
            m_soundQueue[SoundKey] = m_soundQueue[SoundKey] + 1;
            return;
        }
        else
        {
            m_soundTimers[SoundKey] = m_soundEffectCollection[SoundKey].DelayBeetwenSounds;
        }


        // получаем аудио "дорожку" для воспроизведения
        AudioSource soundEffectAudioSource = null;

        // если есть свободная - используем её
        if (m_freeSourceCollections.Count > 0)
        {
            soundEffectAudioSource = m_freeSourceCollections.First.Value;
            m_freeSourceCollections.RemoveFirst();
        }
        // в противном случае создаём новую
        else
        {
            soundEffectAudioSource = Instantiate(AudioEffectLine, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity) as AudioSource;
            soundEffectAudioSource.transform.SetParent(this.transform);
        }

        // выбираем звуковой эффект для воспроизведения
        AudioClipPackage package = m_soundEffectCollection[SoundKey];
        int clipIndex            = Random.Range(0, package.Clips.Length);

        // включаем звуковой эффект
        soundEffectAudioSource.clip = package.Clips[clipIndex].Clip;
        soundEffectAudioSource.Play();
        soundEffectAudioSource.volume = SoundVolume * package.Clips[clipIndex].Volume;
        m_soundeSourceInUseCollections.AddLast(soundEffectAudioSource);
    }
示例#2
0
    /**********************************************************************************/
    // функция проверяет отложенные звуковые эффекты и запускает их в случае необходимости
    //
    /**********************************************************************************/
    protected void ProcessTimersAndQueue()
    {
        List <string> keys = new List <string>(m_soundTimers.Keys);

        foreach (string soundKey in keys)
        {
            int queue = m_soundQueue[soundKey];

            // если в очереди что-то есть - проверяем таймера
            if (queue > 0)
            {
                float timer = m_soundTimers[soundKey];
                timer -= Time.deltaTime;

                // если пришло время воспроизводить звук - делаем это
                if (timer <= 0.0f)
                {
                    m_soundTimers[soundKey] = timer;
                    PlaySound(soundKey);
                    queue--;

                    // выправляем значение таймера
                    if (queue > 0)
                    {
                        AudioClipPackage package = m_soundEffectCollection[soundKey];
                        timer += package.DelayBeetwenSounds;
                    }
                    else
                    {
                        timer = 0.0f;
                    }

                    m_soundQueue[soundKey] = queue;
                }

                // сохраняем обновлённый таймер со значениями для следующего цикла
                m_soundTimers[soundKey] = timer;
            }
        }
    }
示例#3
0
    /**********************************************************************************/
    // включаем следующий трек  зависимости от того, где находимся
    //
    /**********************************************************************************/
    public void PlayNextTrack()
    {
        List <AudioClipPackage> musicSource = null;

        if (m_state == GAM_STATE.MENU)
        {
            musicSource = MainMenuPlayListSources;
        }
        else if (m_state == GAM_STATE.GAME)
        {
            musicSource = GamePlayListSources;
        }

        m_currentTreckNumber++;
        if (m_currentTreckNumber >= musicSource.Count)
        {
            m_currentTreckNumber = 0;
        }

        // меняем местами ссылки на источники звука
        AudioSource currentSource = MusicSource1;

        MusicSource1 = MusicSource2;
        MusicSource2 = currentSource;


        // устанавливаем следуюший трек в новый мажорный источник
        AudioClipPackage package = musicSource[m_currentTreckNumber];
        int       clipIndex      = Random.Range(0, package.Clips.Length);
        AudioClip nextClip       = package.Clips[clipIndex].Clip;

        MusicSource1.clip = nextClip;
        MusicSource1.Play();

        m_currentTrackTiming = 0.0f;
        m_nextTreckSwitch    = nextClip.length;
    }