private void UpdateUI() { // Question Text. _questionNumberText.text = "Page " + (_selectedQuestionIndex + 1) + " of " + _questionAmount; _questionText.text = _selectedQuestion._questionName; // Answers. int answersAmount = _selectedAnswers.Length; _currentAnswerButtons = new GameObject[answersAmount]; for (int index = 0; index < answersAmount; index++) { // Initialisation of an Answer. Answer answer = _selectedAnswers[index]; GameObject answerButton = Instantiate(_answerPrefab, _answerPanel.transform); _currentAnswerButtons[index] = answerButton; // Setting UI Text. Text answerText = answerButton.GetComponentInChildren <Text>(); answerText.text = answer._answerTxt; // Setting Controller Values. AnswerButtonController controller = answerButton.GetComponent <AnswerButtonController>(); controller._answerIndex = index; controller._questionManager = this; } }
// Start is called before the first frame update IEnumerator Start() { // 参照キャッシュ HUDController = GameObject.Find("HUD").GetComponent <HUDController>(); answerButtonController = FindObjectOfType <AnswerButtonController>(); handController = FindObjectOfType <HandController>(); timeLimitAreaController = GameObject.Find("TimeLimitArea").GetComponent <TimeLimitAreaController>(); scoreAreaController = GameObject.Find("ScoreArea").GetComponent <ScoreAreaController>(); // このオブジェクトのコンポーネント audioSource = GetComponent <AudioSource>(); session = new Session(scoreAreaController, timeLimitAreaController, InitialTimeLimitSeconds, wrongAnswerPenaltySeconds); // 中断されるまで繰り返す while (session.CurrentTimeLimitSeconds > 0) { session.elapsedTimeInTurn = 0f; // カードを配る session.Deal(); // 手札をクリア handController.ClearCards(); // カード表示 handController.PlaceCards(session.Hand.Cards); // 選択肢を用意する var choices = session.GenerateChoices(); // 選択肢表示 answerButtonController.SetChoices(choices); do { // プレイヤーが答えるまで待つ playerHasAnswered = false; // 時間切れの際、WaitPlayerToAnswerは中断される yield return(StartCoroutine(WaitPlayerToAnswer())); // 中断時はdo-whileを抜ける if (!playerHasAnswered) { break; } if (session.AnswerIsCorrect) { playerHasAnswered = true; session.rule.OnCorrectAnswer(); HUDController.DisplaycorrectOverlay(); audioSource.PlayOneShot(CorrectAnswerAudioClip); } else { // 失敗時ペナルティ session.rule.OnWrongAnswer(); audioSource.PlayOneShot(WrongAnswerAudioClip); } } while (!session.rule.ShouldProceedToNextTurn()); } // 時間切れになったらゲームオーバー audioSource.Stop(); audioSource.PlayOneShot(TimeUpAudioClip); answerButtonController.Disable(); var modalWindow = GameObject.Find("ResultModal").GetComponent <ModalWindowManager>(); modalWindow.titleText = "Result"; modalWindow.descriptionText = $"Score: {session.Score}\nMiss: 0"; modalWindow.UpdateUI(); modalWindow.OpenWindow(); yield return(new WaitForSeconds(3.0f)); audioSource.clip = ResultAudioClip; audioSource.Play(); }