생명게이지 UI아래 스코어 UI를 구현해보자. 이로직을 지금 만드는 이유는 게임매니저에 점수 계산 로직을 추가하기 위해서다.

Play씬을 로딩한다  

하이라키 Panel-Hpbar를 Ctrl+D로 카피하고 이름을 Panel-Score로 변경한다. 위치는 밑으로 이동시킨다. Image를 삭제하고 Text(TMP) Text Input에 다음과 같이 입력한다. 스코어는 녹색 점수를 표시하는 점수는 빨간색으로 마크업태그를 지정한다.

<color=#00ff00>SCORE :</color><color=#ff0000>0000</color>

몬스터를 죽였을때 스코어를 50점씩 증가시키는 로직은 게임매니저 스크립트에서 구현한다. 다음같이 수정한다.

 

TextMeshPro를 사용하기 위해  using TMPro;를 선언한다.

인스펙터에서 스코어텍스트를 연결할 public TMP_Text scoreText를 선언해준다.

누적점수도 선언해준다. private int totScore = 0;

using TMPro;  // TTextMeshPro를 사용하기 위한 선언
public TMP_Text scoreText;  //인스펙터에서 연결해야함.
private int totScore = 0;

UI 점수 갱신을 담당할 함수를 만든다

public void DisplayScore(int score) {
    totScore += score;
    scoreText.text = $"<color=#00ff00>SCORE :</color><color=#ff0000>{totScore:#,##0}</color>";
}

처음 게임이 시작하면 점수를 0으로 표시하기 위해 DisplayScore(0);을 Start()에 추가한다.

    void Start() {
        CreateMonsterPool();  // 몬스터풀 생성 함수
		//중략
        InvokeRepeating("CreateMonster", 2.0f, createTime);  //2초후 반복적으로 몬스터를 만든다
        DisplayScore(0);
    }

스크립트를 저장한후 하이라키의 Text(TMP)를 끌어다 GameManager 스크립트컴포넌트의 ScoreText에 연결한다.

이제 마지막으로 몬스터에 총알이 맞았을때 점수가 올라가게 할것이다 MonsterCtrl.cs - OncollisionEnter부분을 수정한다.

    private void OnCollisionEnter(Collision coll) {
        if (coll.collider.CompareTag("BULLET")) {
			//중략
            if (hp <= 0) {
                state = State.DIE;
                GameManager.instance.DisplayScore(50);
            }
        }
    }

PlayerPrefs를 활용한 스코어저장

게임을 시장하면 스코어는 초기화된다 유니티에서 제공하는 PlayerPrefs기능을 활용 저장해보자.

PlayerPrefs는 다양한 변수를 저장하고 로드하는 기능을 제공한다.

Start()함수에서 PlayerPrefs에서 로딩한다.

GameManager.cs에 다음과 같이 점수 로딩 저장을 구현한다.

void Start() {
//중략
    InvokeRepeating("CreateMonster", 2.0f, createTime);  //2초후 반복적으로 몬스터를 만든다
    totScore = PlayerPrefs.GetInt("TOT_SCORE", 0);  //Prefs 로딩
    DisplayScore(0);
}

스코어가 변경되면 Prefs에 저장한다.

public void DisplayScore(int score) {
    totScore += score;
    scoreText.text = $"<color=#00ff00>SCORE :</color><color=#ff0000>{totScore:#,##0}</color>";
    PlayerPrefs.SetInt("TOT_SCORE", totScore);  //Prefs에 저장
}

 

+ Recent posts