Example #1
0
    public IEnumerator StoryCoroutine()
    {
        choiceNum = 0;
        lineNum   = 1;
        //ファイルの読み込み
        yield return(StartCoroutine(LoadEpisode()));

        for (int i = 1; i < episodefileList.Count; i++)
        {
            string command = episodefileList[i][0];//コマンドを取得
            switch (command)
            {
            case "BackImage":
                string imageFile = episodefileList[i][3];
                if (imageFile != "")
                {
                    BackImage.sprite = Resources.Load <Sprite>($"BackImage/{imageFile}");
                }
                yield return(null);

                break;

            case "BGM":
                string audioFile = episodefileList[i][3];
                if (audioFile != "")
                {
                    bgmClip = Resources.Load($"Audio/{audioFile}") as AudioClip;
                    AudioManager2D.Instance.AudioBgm.clip = bgmClip;
                    AudioManager2D.Instance.AudioBgm.Play();
                }
                yield return(null);

                break;

            case "Choices":
                episodeMode = EpisodeMode.Choices;

                //分岐数チェック
                if (episodefileList[i][1] != "")
                {
                    choiceNum = int.Parse(episodefileList[i][1]);
                    yield return(StartCoroutine(LoadUI()));
                }

                //選択肢が押されるまで待つ
                selectChoiceNum = 0;

                while (selectChoiceNum == 0)
                {
                    yield return(null);
                }

                lineNum += selectChoiceNum - 1;                   //選択肢と同じ行番号を取得
                string choicetitle = episodefileList[lineNum][2]; //分岐先名を取得
                for (int num = lineNum; num < episodefileList.Count; num++)
                {
                    if (episodefileList[num][0] == choicetitle)
                    {
                        lineNum = num;
                        break;
                    }
                }

                yield return(StartCoroutine(talkingCoroutine(lineNum)));

                //進んだ行番号へ更新
                i = lineNum;

                break;

            case "":
                episodeMode = EpisodeMode.Story;
                //ストーリー再生処理
                yield return(StartCoroutine(talkingCoroutine(i)));

                break;

            default:
                Debug.LogError("コマンドエラーです");
                break;
            }

            //分岐ストーリー終了後なら
            if (episodeMode == EpisodeMode.End)
            {
                for (int num = lineNum; num < episodefileList.Count; num++)
                {
                    if (episodefileList[num][0] == "end")
                    {
                        lineNum = num;
                        break;
                    }
                }

                yield return(StartCoroutine(talkingCoroutine(lineNum)));

                episodeMode = EpisodeMode.Story;
                //進んだ行番号へ更新
                i = lineNum;
            }
            lineNum++;
            yield return(null);
        }
        playMode = EpisodePlayMode.End;
        NextSceneLoad();
    }
Example #2
0
    /// <summary>
    /// 1行再生処理
    /// </summary>
    /// <param name="line"></param>
    /// <returns></returns>
    public IEnumerator talkingCoroutine(int line)
    {
        //キャラクターの名前があればテキストに(無ければ"")
        if (episodefileList[line][4] != "")
        {
            nametxt.text = episodefileList[line][4];
        }
        else
        {
            nametxt.text = null;
        }


        //会話再生
        for (int i = 5; i < episodefileList[line].Length; i++)
        {
            if (episodefileList[line][i] == "")
            {
                storytxt.text = null;
                break;
            }
            else if (episodefileList[line][i] == "end")
            {
                storytxt.text = null;
                episodeMode   = EpisodeMode.End;
                break;
            }
            else
            {
                //会話文が続いていれば表示する
                string word = episodefileList[line][i];
                for (int n = 0; n < word.Length; n++)
                {
                    if (word[n] == '"')
                    {
                        continue;
                    }
                    //空白文字で改行する
                    char nullWord = ' ';
                    if (word[n] == nullWord)
                    {
                        storytxt.text += "\n";
                        continue;
                    }
                    storytxt.text += word[n];
                    if (episodeKeyConfig == EpisodeKeyConfig.Skip)
                    {
                        yield return(new WaitForSeconds(0.01f));
                    }
                    else
                    {
                        yield return(new WaitForSeconds(talkSpeed));
                    }
                }
            }
            nextButton.SetActive(true);
            switch (episodeKeyConfig)
            {
            case EpisodeKeyConfig.Button:
                while (!Keyboard.current.spaceKey.wasPressedThisFrame)
                {
                    if (episodeKeyConfig == EpisodeKeyConfig.Auto)
                    {
                        yield return(new WaitForSeconds(0.5f));

                        break;
                    }
                    else if (episodeKeyConfig == EpisodeKeyConfig.Skip)
                    {
                        yield return(new WaitForSeconds(0.01f));

                        break;
                    }
                    yield return(null);
                }
                break;

            case EpisodeKeyConfig.Auto:

                yield return(new WaitForSeconds(0.5f));

                break;

            case EpisodeKeyConfig.Skip:
                yield return(new WaitForSeconds(0.01f));

                break;
            }
            storytxt.text = null;
            nextButton.SetActive(false);
        }
        yield return(null);
    }