コード例 #1
0
ファイル: DialogueUGUI.cs プロジェクト: nemish/cubematters
        IEnumerator Internal_OnSubtitlesRequestInfo(SubtitlesRequestInfo info)
        {
            var text = info.statement.text;
            var audio = info.statement.audio;
            var actor = info.actor;

            subtitlesGroup.gameObject.SetActive(true);
            actorSpeech.text = "";

            actorName.text = actor.name;
            actorSpeech.color = actor.dialogueColor;

            actorPortrait.gameObject.SetActive( actor.portraitSprite != null );
            actorPortrait.sprite = actor.portraitSprite;

            if (audio != null){
                var actorSource = actor.transform != null? actor.transform.GetComponent<AudioSource>() : null;
                var playSource = actorSource != null? actorSource : localSource;
                playSource.clip = audio;
                playSource.Play();
                actorSpeech.text = text;
                var timer = 0f;
                while (timer < audio.length){
                    if (skipOnInput && Input.anyKeyDown){
                        playSource.Stop();
                        break;
                    }
                    timer += Time.deltaTime;
                    yield return null;
                }
            }

            if (audio == null){
                var tempText = "";
                var inputDown = false;
                if (skipOnInput){
                    StartCoroutine(CheckInput( ()=>{ inputDown = true; } ));
                }

                for (int i= 0; i < text.Length; i++){

                    if (skipOnInput && inputDown){
                        actorSpeech.text = text;
                        yield return null;
                        break;
                    }

                    if (subtitlesGroup.gameObject.activeSelf == false){
                        yield break;
                    }

                    tempText += text[i];
                    yield return StartCoroutine(DelayPrint(subtitleDelays.characterDelay));
                    char c = text[i];
                    if (c == '.' || c == '!' || c == '?'){
                        yield return StartCoroutine(DelayPrint(subtitleDelays.sentenceDelay));
                    }
                    if (c == ','){
                        yield return StartCoroutine(DelayPrint(subtitleDelays.commaDelay));
                    }

                    actorSpeech.text = tempText;
                }

                if (!waitForInput){
                    yield return StartCoroutine(DelayPrint(subtitleDelays.finalDelay));
                }
            }

            if (waitForInput){
                while(!Input.anyKeyDown){
                    yield return null;
                }
            }

            yield return null;
            subtitlesGroup.gameObject.SetActive(false);
            info.Continue();
        }