private IEnumerator AudioSourceLifeCycleOpertaion() { while (m_RunASLCController) { yield return(new WaitForSeconds(lifeCycleCheckDuration)); for (int audioSourceIndex = m_NumberOfPreloadedAudio; audioSourceIndex < m_AudioSourceList.Count; audioSourceIndex++) { if (m_AudioSourceList.Count > m_NumberOfPreloadedAudio && Time.time > m_AudioSourceList[audioSourceIndex].autoDestructTime) { if (m_AudioSourceList[audioSourceIndex].audioSourceReference.loop && IsMusicEnabled()) { AudioSourceAttribute t_ModifiedAudioSourceAttribute = m_AudioSourceList[audioSourceIndex]; t_ModifiedAudioSourceAttribute.autoDestructTime = Time.time + t_ModifiedAudioSourceAttribute.audioSourceReference.clip.length + (lifeCycleCheckDuration / 3.0f); m_AudioSourceList[audioSourceIndex] = t_ModifiedAudioSourceAttribute; } else { Destroy(m_AudioSourceList[audioSourceIndex].audioSourceObject); m_AudioSourceList.RemoveAt(audioSourceIndex); m_AudioSourceList.TrimExcess(); break; } } } } StopCoroutine(AudioSourceLifeCycleOpertaion()); }
internal static AudioSource GetAudioSource(ISkill skill) { // TODO: закэшировать var asName = AudioSourceAttribute.GetAudioSourceName(skill); if (asName == null) { return(null); } return(FindObjectsOfType <AudioSource>().FirstOrDefault(aS => aS.name == asName)); }
private void LoadDefaultAudioSource() { List <int> m_ListOfPreloadedAudioSourceIndex = new List <int>(); for (int index = 0; index < audio.Length; index++) { if (audio[index].usePreloadedAudioSource) { m_ListOfPreloadedAudioSourceIndex.Add(index); } } int m_PreloadedAudioSourceIndex = 0; m_NumberOfPreloadedAudio = m_ListOfPreloadedAudioSourceIndex.Count; for (int index = 0; index < m_NumberOfPreloadedAudio; index++) { GameObject m_NewAudioSource = new GameObject(); m_NewAudioSource.name = "Audio Source (" + m_AudioSourceList.Count + ")"; m_NewAudioSource.transform.parent = transform; m_NewAudioSource.AddComponent <AudioSource>(); //Adding to AudioSource List AudioSourceAttribute m_NewAudioSourceAttribute = new AudioSourceAttribute(); m_NewAudioSourceAttribute.audioSourceObject = m_NewAudioSource; m_NewAudioSourceAttribute.audioSourceReference = m_NewAudioSource.GetComponent <AudioSource>(); m_NewAudioSourceAttribute.audioSourceReference.playOnAwake = false; if (m_PreloadedAudioSourceIndex < m_ListOfPreloadedAudioSourceIndex.Count) { m_NewAudioSourceAttribute.audioSourceReference.clip = audio[m_ListOfPreloadedAudioSourceIndex[m_PreloadedAudioSourceIndex]].audioClip; m_NewAudioSourceAttribute.audioSourceReference.volume = audio[m_ListOfPreloadedAudioSourceIndex[m_PreloadedAudioSourceIndex]].volumn; m_PreloadedAudioSourceIndex++; } m_AudioSourceList.Add(m_NewAudioSourceAttribute); } }
public void DisableMusic() { PlayerPrefs.SetInt(IS_GAME_MUSIC_DISABLED, 1); int m_AudioIndex = -1; for (int audioSourceIndex = 0; audioSourceIndex < m_AudioSourceList.Count; audioSourceIndex++) { m_AudioIndex = GetAudioClipIndex(m_AudioSourceList[audioSourceIndex].audioSourceReference.clip.name); if (m_AudioIndex != -1 && audio[m_AudioIndex].IsMusic) { m_AudioSourceList[audioSourceIndex].audioSourceReference.Stop(); if (!audio[m_AudioIndex].usePreloadedAudioSource) { AudioSourceAttribute t_ModifiedAudioSourceAttribute = m_AudioSourceList[audioSourceIndex]; t_ModifiedAudioSourceAttribute.autoDestructTime = Time.time; m_AudioSourceList[audioSourceIndex] = t_ModifiedAudioSourceAttribute; } } } }
public void PlaySound(string name, bool loop) { //Debug.Log ("##Sound " + (loop ? "(Loop) " : " ") + name); if (IsPlayingSoundAllowed(name)) { bool m_FoundFreeAudioSource = false; int m_FreeAudioSourceIndex = -1; int m_AudioClipIndex = -1; //Find AudioClip for (int audioClipIndex = 0; audioClipIndex < audio.Length; audioClipIndex++) { if (name == audio[audioClipIndex].name) { m_AudioClipIndex = audioClipIndex; break; } } if (m_AudioClipIndex == -1) { Debug.LogError(name + " : The following sound clip wasn't added to AudioManager, please add it to audio manager"); } else { //Find Free Audio Source if (audio[m_AudioClipIndex].usePreloadedAudioSource) { //If Preloaded Audio Source for (int audioSourceIndex = 0; audioSourceIndex < m_AudioSourceList.Count; audioSourceIndex++) { if (m_AudioSourceList[audioSourceIndex].audioSourceReference.clip == audio[m_AudioClipIndex].audioClip) { m_AudioSourceList[audioSourceIndex].audioSourceReference.loop = loop; m_AudioSourceList[audioSourceIndex].audioSourceReference.Play(); break; } } } else { //if Not Preloaded Audio Source for (int audioSourceIndex = m_NumberOfPreloadedAudio; audioSourceIndex < m_AudioSourceList.Count; audioSourceIndex++) { if (!m_AudioSourceList[audioSourceIndex].audioSourceReference.isPlaying) { m_FreeAudioSourceIndex = audioSourceIndex; m_FoundFreeAudioSource = true; break; } } if (!m_FoundFreeAudioSource) { GameObject m_NewAudioSource = new GameObject(); m_NewAudioSource.name = "Audio Source (" + m_AudioSourceList.Count + ")"; m_NewAudioSource.transform.parent = transform; m_NewAudioSource.AddComponent <AudioSource>(); //Adding to AudioSource List AudioSourceAttribute m_NewAudioSourceAttribute = new AudioSourceAttribute(); m_NewAudioSourceAttribute.audioSourceObject = m_NewAudioSource; m_NewAudioSourceAttribute.audioSourceReference = m_NewAudioSource.GetComponent <AudioSource>(); m_NewAudioSourceAttribute.audioSourceReference.playOnAwake = false; m_AudioSourceList.Add(m_NewAudioSourceAttribute); m_FreeAudioSourceIndex = m_AudioSourceList.Count - 1; } AudioSourceAttribute m_ModifiedSourceAttribute = new AudioSourceAttribute(); m_ModifiedSourceAttribute = m_AudioSourceList[m_FreeAudioSourceIndex]; m_ModifiedSourceAttribute.autoDestructTime = Time.time + audio[m_AudioClipIndex].audioClip.length + (lifeCycleCheckDuration / 3.0f); m_AudioSourceList[m_FreeAudioSourceIndex] = m_ModifiedSourceAttribute; m_AudioSourceList[m_FreeAudioSourceIndex].audioSourceReference.clip = audio[m_AudioClipIndex].audioClip; m_AudioSourceList[m_FreeAudioSourceIndex].audioSourceReference.volume = audio[m_AudioClipIndex].volumn; if (loop) { m_AudioSourceList[m_FreeAudioSourceIndex].audioSourceReference.loop = loop; } m_AudioSourceList[m_FreeAudioSourceIndex].audioSourceReference.Play(); } } } }