점수판 만들기

점수 보드 만들기

  • UI : Canvas라는 도화지 위에 그려지며, 카메라 위치와는 관계없이 보여지는 것
    • Hierarchy 창의 MainScene에서 우클릭 -> GameObject -> UI -> Canvas
  • Canvas 우클릭 -> UI -> Text
  • Inspector 창에서 적절하게 위치와 크기 및 색상을 설정
    • Font는 Project 창의 Assets 하위에 만든 Fonts 폴더에서 드래그 해오면 된다.

점수 갱신하기

  • GameManager는 Singleton이어야 한다! 2개 이상 생성되는 일이 없도록 할 것

    public static GameManager I;
    
     void Awake()
     {
    	I = this;
     }
  • 점수를 올려주는 함수 생성

    int totalScore = 0;
    
     public void addScore(int score)
     {
     	totalScore += score;
     }
  • 빗방울과 르탄이가 부딪혔다는 사실을 알게 하기 위해 rtan에 tag 및 collider 추가

  • 빗방울이 르탄이와 부딪혔을 때 빗방울의 점수를 GameManager의 addScore 함수로 넘겨주기

    • rain script
    void OnCollisionEnter2D(Collision2D coll)
    {
    	...
      
      if (coll.gameObject.tag == "rtan")
      {
      	Destroy(gameObject);
          GameManager.I.addScore(score);
      }
    }
  • GameManager에 ScoreText 선언 및 업데이트 하기

    using UnityEngine.UI;
    
     public Text scoreText;
     
     public void addScore(int score)
     {
     	...
      
      scoreText.text = totalScore.ToString();
     }



게임 끝내기

Retry 판넬 만들기

  • UI - Canvas - Image/Text 로 구현
  • retry 판넬은 게임이 끝나야 보이는 것이므로 inactive 상태로 만들기
    • 이름 왼쪽 체크박스를 해제하면 된다.

시간이 흐르게 하기

  • 제한시간 limit에서 시간이 흐르는 만큼 빼기

    // GameManager
    public Text timeText;
    float limit = 60f;
    
    void Update()
    {
      limit -= Time.deltaTime;
      timeText.text = limit.ToString("N2");	// N2는 소수점 둘째자리까지 표시
    }
  • 시간이 다 되면 멈추게 하기

    • Time.timeScale은 시간을 느리게 할 수도, 멈추게 할 수도 있다.
    void Update()
    {
      limit -= Time.deltaTime;
      if (limit < 0)
      {
      	Time.timeScale = 0.0f;
          limit = 0.0f;
      }
      timeText.text = limit.ToString("N2");
    }

게임이 끝나면 Retry 판넬 보여주기

  • GameManager에 retry 판넬 선언 및 active하게 만들기
    public GameObject panel;
    
    void Update()
    {
      ...
      if (limit < 0)
      {
      	Time.timeScale = 0.0f;
        panel.SetActive(true);
        limit = 0.0f;
      }
      ...
    }


게임 재시작 하기

Retry 판넬을 클릭하면 재시작하게 만들기

  • Panel에서 Add Component -> Button

  • 재시작 함수 만들기 -> GameManager가 할 일

    using UnityEngine.SceneManagement;
    
    public void retry()
    {
    	SceneManager.LoadScene("MainScene");
    }
  • panel script 생성

    • retry는 전체 Scene을 새로고침 하는 강력한 역할이기 때문에 panel 같은 요소가 아닌 GameManager가 갖고 있도록 하는 것이 안전하다.
    public void retry()
    {
    	gameManager.I.retry();
    }
  • Panel의 Button에서 OnClick 설정

상태 초기화 함수 만들기

  • 게임 시작 시 timeScale, timeLimit, totalScore를 초기화 해줘야 한다.

    // GamaManager
    
    void Start()
    {
    	...
        initGame();
    }
    
    void initGame()
    {
    	Time.timeScale = 1.0f;
      	totalScore = 0;
          limit = 60.0f;
    }



완성된 모습!

0개의 댓글