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(); }
/// <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); }