public IEnumerator StartQuestion() { GlobalEvent.shared.Invoke(EventType.PlayStartAudio); yield return(ShowDialogue(true, true, string.Format("『{0}』马上要开始了,点击任意位置开始答题", roundService.IsChanllenge() ? "挑战模式" : "答题回合"))); yield return(WaitDialogueConfirm()); while (roundService.HasNextQuestion() && !roundService.IsEnergyEmpty()) { questionView.gameObject.SetActive(true); questionView.ShowQuestion(roundService.NextQuestion()); SetProgress(roundService.Current, roundService.Total); yield return(ShowDialogue(false, false, "请作答...")); while (!roundService.IsCurrentCompleted) { Debug.Log(roundService.Current + "," + roundService.CurrentQuestion.result); yield return(WaitForAnswer()); roundService.SubmitAnswer(answer); if (!roundService.IsCorrect) { Utils.PlayClip(wrongClip, 0.4f); } else { Utils.PlayClip(correctClip, 0.4f); } if (roundService.IsEnergyEmpty()) { questionView.DisableOption(answer); yield return(characterController.ShowStateFor(roundService)); VoicePlayer.shared.Play(voiceSuite.X0Clips.RandomOne()); break; } if (!roundService.IsCorrect) { questionView.DisableOption(answer); yield return(characterController.ShowStateFor(roundService)); switch (roundService.Energy) { case 1: VoicePlayer.shared.Play(voiceSuite.X1Clips.RandomOne()); break; case 2: VoicePlayer.shared.Play(voiceSuite.X2Clips.RandomOne()); break; case 3: VoicePlayer.shared.Play(voiceSuite.X3Clips.RandomOne()); break; case 4: VoicePlayer.shared.Play(voiceSuite.X4Clips.RandomOne()); break; } yield return(ShowDialogue(false, true, "好像不正确哦")); yield return(WaitDialogueConfirm()); StartCoroutine(characterController.ResumeStateFor(roundService)); yield return(ShowDialogue(false, false, "请继续作答...")); } else { yield return(characterController.ShowStateFor(roundService)); if (roundService.Energy < 5) { VoicePlayer.shared.Play(voiceSuite.XYClips.RandomOne()); } else { if (roundService.Current == 1) { VoicePlayer.shared.Play(voiceSuite.Y1Clips.RandomOne()); } else { if (roundService.Combo <= 1) { VoicePlayer.shared.Play(voiceSuite.X5Clips.RandomOne()); } else { switch (roundService.Combo) { case 2: VoicePlayer.shared.Play(voiceSuite.Y2Clips.RandomOne()); break; case 3: VoicePlayer.shared.Play(voiceSuite.Y3Clips.RandomOne()); break; case 4: VoicePlayer.shared.Play(voiceSuite.Y4Clips.RandomOne()); break; case 5: VoicePlayer.shared.Play(voiceSuite.Y5Clips.RandomOne()); break; case 6: VoicePlayer.shared.Play(voiceSuite.Y6Clips.RandomOne()); break; case 7: VoicePlayer.shared.Play(voiceSuite.Y7Clips.RandomOne()); break; case 8: VoicePlayer.shared.Play(voiceSuite.Y8Clips.RandomOne()); break; case 9: VoicePlayer.shared.Play(voiceSuite.Y9Clips.RandomOne()); break; case 10: VoicePlayer.shared.Play(voiceSuite.Y10Clips.RandomOne()); break; } } } } } } questionView.HighlightOptions(roundService.CurrentQuestion.result); // show explaination string resultTpl = "{1},解释如下:\n『{2}』"; string result = (roundService.IsCorrect ? "回答正确" : "回答错误"); string dialogue = String.Format( resultTpl, Const.COLOR_CORRECT_HEX_STRING, result, roundService.CurrentQuestion.explain); yield return(ShowDialogue(false, true, dialogue)); yield return(WaitDialogueConfirm()); if (roundService.IsCorrect) { yield return(characterController.ResumeStateFor(roundService)); } } // save completed var completedCount = 0; var pkgService = PackageService.For(roundService.package); pkgService.Load(); foreach (var answerItem in roundService.CompletedList) { if (answerItem.completed) { completedCount++; pkgService.SetCompleted(answerItem.question); } } pkgService.Save(); int originCompleted = PackageProgressService.shared.CompletedCount; // save progress if (!roundService.package.temporary) { var progressService = PackageProgressService.shared; progressService.Load(); progressService.SetProgress(roundService.package.id, pkgService.CompletedCount, roundService.PackageQuestionCount); progressService.Save(); } if (completedCount < roundService.Total) { // show ending dialogue string roundResult = "『答题回合』结束了,总共{0}题,本次完成{1}题,只有一次回答成功才算完成,点击任意位置返回"; roundResult = String.Format(roundResult, "" + roundService.Total, "" + completedCount); yield return(ShowDialogue(true, true, roundResult)); yield return(WaitDialogueConfirm()); } else { yield return(ShowFullScreenEffect()); } int currentCompleted = PackageProgressService.shared.CompletedCount; if (currentCompleted / Const.ILLUSTRATION_REWARD_BASE_FACTOR > originCompleted / Const.ILLUSTRATION_REWARD_BASE_FACTOR) { yield return(RewardIllustration()); } GlobalEvent.shared.Invoke(EventType.QuestionPanelToPackageList); }