방명록
- 유니티 게임개발 입문 #62023년 09월 11일 21시 55분 50초에 업로드 된 글입니다.작성자: noun06
운석 타입 별 점수
- 점수 시스템 관련된 부분들을 추가하였음. 점수는 게임 점수와 별점으로 나누어지며 그 중 별점만이 저장되는 값임.
- 우선 Meteor.cs에서 타입 별 점수를 지정해줌. 실제 값은 자식 클래스에서 설정.
//Meteor.cs //... public int Score { get; set; } //... public Meteor(string name, int hardness, int score) { Name = name; Hardness = hardness; Score = score; }
점수 계산
- GameManager.cs에서 점수 관련 로직을 작성하였음. 시간과 파괴한 운석 수를 통해 계산되는 최종점수, 게임 플레이 중 업데이트되는 운석 파괴 점수, 그리고 최종점수에 기반한 별점이 있음. 별점은 키값을 통해 저장되고StageManager.cs에서 불러옴.
//GameManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class GameManager : MonoBehaviour { public static GameManager I; [SerializeField] private Stage _stage; private int _curStage; private bool _isOver; public int finalScore = 0; public int score = 0; public TMP_Text scoreText; public int starRating = 0; private float _runningTime = 0f; public TMP_Text timeText; private void Awake() { I = this; } void Start() { // StageManager에서 stage 정보 가져오는 부분 //_curStage = StageManager.SM.GetStage(); _curStage = 1; if (_curStage == 1) { // TODO SetStageInfo 인자 값 설정 _stage.SetStageInfo("NewEasyStageGrid", ""); } else if (_curStage == 2) { _stage.SetStageInfo("NormalStageGrid", ""); } else if (_curStage == 3) { _stage.SetStageInfo("HardStageGrid", ""); } _isOver = false; starRating = PlayerPrefs.GetInt(StringKey.STAR_RATING_PREFS, 0); } void Update() { if (_isOver) { _stage.StageFail(); } _runningTime += Time.deltaTime; timeText.text = _runningTime.ToString("N2"); finalScore = score + Mathf.FloorToInt(1000 / _runningTime); CalculateStarRating(); } public void GameOver() { _isOver = true; } public void UpdateScore(int scoreValue) { score += scoreValue; scoreText.text = "Score: " + score; } private void CalculateStarRating() { if (finalScore > 300) { starRating = 3; } else if (finalScore > 200) { starRating = 2; } else if (finalScore > 100) { starRating = 1; } else { starRating = 0; } PlayerPrefs.SetInt(StringKey.STAR_RATING_PREFS, starRating); PlayerPrefs.Save(); } }
별점 이미지 적용
- StageUIManager.cs 내에서 게임매니저의 별점 값을 가져와 이미지로 나타냄.
- 그리고 Stage.cs에서 SetStageEndPanel 메서드를 호출하여 별점을 나타냄.
//StageUIManager.cs public void SetStageEndPanel(bool isClear, int score) { string clearText = isClear ? STAGE_CLEAR : STAGE_FAIL; clearText += " Score: " + GameManager.I.finalScore; _gameOverText.text = clearText; SetStarImage(GameManager.I.starRating); SetBtn(); _stageEndPanelImage.SetActive(true); } // 점수에 따른 별 이미지 세팅 private void SetStarImage(int starRating) { Sprite filledStar = Resources.Load<Sprite>("Image/StarImage/filled_star_img"); Sprite emptyStar = Resources.Load<Sprite>("Image/StarImage/empty_star_img"); _star1Image.sprite = (starRating >= 1) ? filledStar : emptyStar; _star2Image.sprite = (starRating >= 2) ? filledStar : emptyStar; _star3Image.sprite = (starRating >= 3) ? filledStar : emptyStar; }
다음글이 없습니다.이전글이 없습니다.댓글