/// <summary> /// Write a line of story text to the Say Dialog. Must be started as a coroutine. /// </summary> /// <param name="text">The text to display.</param> /// <param name="clearPrevious">Clear any previous text in the Say Dialog.</param> /// <param name="waitForInput">Wait for player input before continuing once text is written.</param> /// <param name="fadeWhenDone">Fade out the Say Dialog when writing and player input has finished.</param> /// <param name="stopVoiceover">Stop any existing voiceover audio before writing starts.</param> /// <param name="voiceOverClip">Voice over audio clip to play.</param> /// <param name="onComplete">Callback to execute when writing and player input have finished.</param> public virtual IEnumerator DoSay(string text, bool clearPrevious, bool waitForInput, bool fadeWhenDone, bool stopVoiceover, AudioClip voiceOverClip, Action onComplete) { var writer = GetWriter(); if (writer.IsWriting || writer.IsWaitingForInput) { writer.Stop(); while (writer.IsWriting || writer.IsWaitingForInput) { yield return(null); } } gameObject.SetActive(true); this.fadeWhenDone = fadeWhenDone; // Voice over clip takes precedence over a character sound effect if provided AudioClip soundEffectClip = null; if (voiceOverClip != null) { WriterAudio writerAudio = GetWriterAudio(); writerAudio.OnVoiceover(voiceOverClip); } else if (speakingCharacter != null) { soundEffectClip = speakingCharacter.SoundEffect; } yield return(StartCoroutine(writer.Write(text, clearPrevious, waitForInput, stopVoiceover, soundEffectClip, onComplete))); }
protected virtual IEnumerator SayInternal(string text, bool clearPrevious, bool waitForInput, bool fadeWhenDone, AudioClip voiceOverClip, Action onComplete) { Writer writer = GetWriter(); // Stop any existing Say Command and write this one instead // This will probably take a frame or two to complete while (writer.isWriting || writer.isWaitingForInput) { writer.Stop(); yield return(null); } this.fadeWhenDone = fadeWhenDone; // Voice over clip takes precedence over a character sound effect if provided AudioClip soundEffectClip = null; if (voiceOverClip != null) { WriterAudio writerAudio = GetWriterAudio(); writerAudio.PlayVoiceover(voiceOverClip); } else if (speakingCharacter != null) { soundEffectClip = speakingCharacter.soundEffect; } writer.Write(text, clearPrevious, waitForInput, soundEffectClip, onComplete); }
/// <summary> /// Write a line of story text to the Say Dialog. Must be started as a coroutine. /// </summary> /// <param name="text">The text to display.</param> /// <param name="clearPrevious">Clear any previous text in the Say Dialog.</param> /// <param name="waitForInput">Wait for player input before continuing once text is written.</param> /// <param name="fadeWhenDone">Fade out the Say Dialog when writing and player input has finished.</param> /// <param name="stopVoiceover">Stop any existing voiceover audio before writing starts.</param> /// <param name="voiceOverClip">Voice over audio clip to play.</param> /// <param name="onComplete">Callback to execute when writing and player input have finished.</param> public virtual IEnumerator DoSay(string text, bool clearPrevious, bool waitForInput, bool fadeWhenDone, bool stopVoiceover, bool waitForVO, AudioClip voiceOverClip, Action onComplete) { var writer = GetWriter(); WriterAudio audio = SpeakingCharacter.GetComponent <WriterAudio>(); if (audio != null) { writer.writerListeners.Add(audio); } if (writer.IsWriting || writer.IsWaitingForInput) { writer.Stop(); while (writer.IsWriting || writer.IsWaitingForInput) { yield return(null); } } if (closeOtherDialogs) { for (int i = 0; i < activeSayDialogs.Count; i++) { var sd = activeSayDialogs[i]; if (sd.gameObject != gameObject) { sd.SetActive(false); } } } gameObject.SetActive(true); this.fadeWhenDone = fadeWhenDone; // Voice over clip takes precedence over a character sound effect if provided AudioClip soundEffectClip = null; if (voiceOverClip != null) { WriterAudio writerAudio = GetWriterAudio(); writerAudio.OnVoiceover(voiceOverClip); } else if (speakingCharacter != null) { soundEffectClip = speakingCharacter.SoundEffect; } writer.AttachedWriterAudio = writerAudio; yield return(StartCoroutine(writer.Write(text, clearPrevious, waitForInput, stopVoiceover, waitForVO, soundEffectClip, onComplete))); }
protected WriterAudio GetWriterAudio() { if (writerAudio != null) { return(writerAudio); } writerAudio = GetComponent <WriterAudio>(); if (writerAudio == null) { writerAudio = gameObject.AddComponent <WriterAudio>(); } return(writerAudio); }
protected virtual WriterAudio GetWriterAudio() { if (WriterAudio != null) { return(WriterAudio); } WriterAudio = GetComponent <WriterAudio>(); if (WriterAudio == null) { WriterAudio = gameObject.AddComponent <WriterAudio>(); } return(WriterAudio); }
/// <summary> /// Write a line of story text to the Say Dialog. Must be started as a coroutine. /// </summary> /// <param name="text">The text to display.</param> /// <param name="clearPrevious">Clear any previous text in the Say Dialog.</param> /// <param name="waitForInput">Wait for player input before continuing once text is written.</param> /// <param name="fadeWhenDone">Fade out the Say Dialog when writing and player input has finished.</param> /// <param name="stopVoiceover">Stop any existing voiceover audio before writing starts.</param> /// <param name="voiceOverClip">Voice over audio clip to play.</param> /// <param name="onComplete">Callback to execute when writing and player input have finished.</param> public virtual IEnumerator DoSay(string text, bool clearPrevious, bool waitForInput, bool fadeWhenDone, bool stopVoiceover, bool waitForVO, AudioClip voiceOverClip, Action onComplete) { // 获取Writer控件 var writer = GetWriter(); // 结束Writer,上一次的书写 // 并等待,Writer的结束 if (writer.IsWriting || writer.IsWaitingForInput) { writer.Stop(); while (writer.IsWriting || writer.IsWaitingForInput) { yield return(null); } } // 是否关闭 // 其他的Say窗口 if (closeOtherDialogs) { for (int i = 0; i < activeSayDialogs.Count; i++) { var sd = activeSayDialogs[i]; if (sd.gameObject != gameObject) { sd.SetActive(false); } } } // 开启自己 gameObject.SetActive(true); // 设置,之后是否隐藏选项 this.fadeWhenDone = fadeWhenDone; // Voice over clip takes precedence over a character sound effect if provided // 获取播放的声音 AudioClip soundEffectClip = null; if (voiceOverClip != null) { // WriterAudio类 // 播放声音 WriterAudio writerAudio = GetWriterAudio(); writerAudio.OnVoiceover(voiceOverClip); } else if (speakingCharacter != null) { soundEffectClip = speakingCharacter.SoundEffect; } writer.AttachedWriterAudio = writerAudio; // 调用Coroutine // Writer进行书写 yield return(StartCoroutine(writer.Write(text, clearPrevious, waitForInput, stopVoiceover, waitForVO, soundEffectClip, onComplete))); }
protected WriterAudio GetWriterAudio() { if (writerAudio != null) { return writerAudio; } writerAudio = GetComponent<WriterAudio>(); if (writerAudio == null) { writerAudio = gameObject.AddComponent<WriterAudio>(); } return writerAudio; }