void PlayVoiceInternal(string voiceName, float delay = 0, bool killOtherVoices = true) { if (killOtherVoices) { KillAllVoices(); } if (string.IsNullOrEmpty(voiceName)) { return; } NextVoice next = new NextVoice(); next.name = voiceName; next.delay = delay; _voicesQueue.Add(next); }
IEnumerator VoicesCoroutine() { while (true) { _voiceBusy = false; // Wait next voice while (_voicesQueue.Count == 0) { yield return(null); } _voiceBusy = true; NextVoice next = _voicesQueue [0]; _voicesQueue.RemoveAt(0); _currentVoiceKilled = false; float timer = next.delay; while (timer > 0 && !_currentVoiceKilled) { timer -= Time.deltaTime; yield return(null); } if (_currentVoiceKilled) { continue; } string voiceFile; if (string.IsNullOrEmpty(languageFolder)) { voiceFile = "Voices/" + next.name; } else { voiceFile = "Voices/" + languageFolder + "/" + next.name; } // Play voice ResourceRequest request = LoadClipAsync(voiceFile); while (!request.isDone) { yield return(null); } AudioClip voiceClip = (AudioClip)request.asset; if (_currentVoiceKilled) { continue; } GameObject voice = new GameObject("Voice: " + next.name); voice.transform.parent = transform; _currentVoiceSource = voice.AddComponent <AudioSource> (); _currentVoiceSource.outputAudioMixerGroup = voiceAudioMixerGroup; _currentVoiceSource.priority = 64; _currentVoiceSource.playOnAwake = false; _currentVoiceSource.mute = _mutedVoice; _currentVoiceSource.volume = _volumeVoice * DefaultVoiceVolume; _currentVoiceSource.ignoreListenerPause = false; _currentVoiceSource.clip = voiceClip; _currentVoiceSource.Play(); // Wait voice over or killed while (_currentVoiceSource.isPlaying) { if (_currentVoiceKilled) { _currentVoiceSource.Stop(); break; } yield return(null); } _currentVoiceSource = null; Destroy(voice); yield return(null); } }
void PlayVoiceInternal(string voiceName, float delay = 0, bool killOtherVoices = true) { if (killOtherVoices) KillAllVoices(); if (string.IsNullOrEmpty(voiceName)) return; NextVoice next = new NextVoice(); next.name = voiceName; next.delay = delay; _voicesQueue.Add(next); }