Ch 9. 결과 UI, 점수 계산
카테고리: Unity Lesson 4
태그: Unity Game Engine
케이디님의 [유니티 강좌] 리듬 게임 유튜브 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click
🚀 결과 UI
📜TimingManager
int[] judgementRecord = new int[5];
public int[] GetJudgementRecord()
{
return judgementRecord;
}
public void MissRecord()
{
judgementRecord[4]++; // Miss의 판정 기록
}
public bool CheckTiming()
{
if (CheckCanNextPlate())
{
theScoreManager.IncreaseScore(j); // 점수 증가
theStage.ShowNextPlate(); // 다음 플레이트 호출
theEffect.JudgementEffect(j); // 판정 연출
judgementRecord[j]++; // 판정 기록
}
else
{
theEffect.JudgementEffect(5);
}
return true;
}
}
}
// Miss
theCombo.ResetCombo();
theEffect.JudgementEffect(timingBoxs.Length);
MissRecord();
return false;
judgementRecord
- 인덱스별로, 즉 Perfect, Cool, Good, Bad, Miss 별로 횟수를 전부 기록해야 한다. 그래야 결과 UI 에 띄울 수 있다!
📜ScoreManager
public int GetCurrentScore()
{
return currentSrore;
}
📜ComboManager
int currentCombo = 0;
int maxCombo = 0;
public void IncreaseCombo(int p_num = 1)
{
//...
if (maxCombo < currentCombo)
maxCombo = currentCombo;
//...
}
public int GetMaxCombo()
{
return maxCombo;
}
최대 콤보를 기록해야 한다.
📜Result
Result
에 붙인다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Result : MonoBehaviour
{
[SerializeField] GameObject goUI = null;
[SerializeField] Text[] txtCount = null;
[SerializeField] Text txtCoin = null;
[SerializeField] Text txtScore = null;
[SerializeField] Text txtMaxCombo = null;
ScoreManager theScore;
ComboManager theCombo;
TimingManager theTiming;
void Start()
{
theScore = FindObjectOfType<ScoreManager>();
theCombo = FindObjectOfType<ComboManager>();
theTiming = FindObjectOfType<TimingManager>();
}
public void ShowResult()
{
// 결과 UI 활상화
goUI.SetActive(true);
// 초기화
for (int i = 0; i < txtCount.Length; i++)
txtCount[i].text = "0";
txtCoin.text = "0";
txtScore.text = "0";
txtMaxCombo.text = "0";
// 점수들 가져오기
int[] t_judgement = theTiming.GetJudgementRecord();
int t_currentScore = theScore.GetCurrentScore();
int t_maxCombo = theCombo.GetMaxCombo();
int t_coin = (t_currentScore / 50);
// 텍스트 세팅 (가져온 것들로)
for (int i = 0; i < txtCount.Length; i++)
{
txtCount[i].text = string.Format("{0:#,##0}", t_judgement[i]);
}
txtScore.text = string.Format("{0:#,##0}", t_currentScore);
txtMaxCombo.text = string.Format("{0:#,##0}", t_maxCombo);
txtCoin.text = string.Format("{0:#,##0}", t_coin);
}
}
📜GoalPlate
Result theResult;
theResult = FindObjectOfType<Result>();
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
theAudio.Play();
PlayerController.s_canPressKey = false;
theNote.RemoveNote();
theResult.ShowResult();
}
}
목표 지점에 도달했을 때 결과 UI 띄우기 theResult.ShowResult();
📜NoteManager
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.CompareTag("Note"))
{
if (collision.GetComponent<Note>().GetNoteFlag())
{
theTimingManager.MissRecord();
theEffect.JudgementEffect(4);
theCombo.ResetCombo();
}
노트를 완전히 놓쳐버렸을 때 Miss 횟수를 카운팅 할 수 있도록 theTimingManager.MissRecord();
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기