유니티로 Pong 게임 만들기

6) 유니티로 Pong 게임 만들기 - 점수 ui 표시

잡동사니123 2024. 1. 24. 14:08

목표

  • 공이 골 역할 벽에 닿았을때 점수를 ui에 표시되게 할 것이다.

 

Ball.cs (스크립트)

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if(collision.gameObject.CompareTag("Paddle"))
        {
            direction.x = -direction.x;
        }
        if (collision.gameObject.CompareTag("Wall"))
        {
            direction.y = -direction.y;
        }
        if (collision.gameObject.CompareTag("LeftGoalWall")||collision.gameObject.CompareTag("RightGoalWall"))
        {
            if (collision.gameObject.CompareTag("RightGoalWall"))
            {
                GameManager.instance.AddScore(true);
                RespawnBall(true);
            }
            else
            {
                GameManager.instance.AddScore(false);
                RespawnBall(false);
            }
        }
    }
  • Debug.Log로 처리하는 부분을 다음과 같이 바꾼다.(함수에 대한 기능은 아래 GameManager.cs 스크립트 참조)

 

GameManager.cs (스크립트)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
    private int leftScore;
    private int rightScore;
    public Text leftScoreText;
    public Text rightScoreText;

    public static GameManager instance
    {
        get
        {
            if (m_instance == null)
            {
                m_instance = FindObjectOfType<GameManager>();
            }
            return m_instance;
        }
    }

    private static GameManager m_instance;

    void Start()
    {
        leftScore = 0;
        rightScore = 0;
    }

    public void AddScore(bool isLeftwin)
    {
        if(isLeftwin)
        {
            leftScore++;
            leftScoreText.text = leftScore.ToString();
        }
        else
        {
            rightScore++;
            rightScoreText.text = rightScore.ToString();
        }
    }
}
  • 다음과 같이 새 스크립트 작성

 

    public static GameManager instance
    {
        get
        {
            if (m_instance == null)
            {
                m_instance = FindObjectOfType<GameManager>();
            }
            return m_instance;
        }
    }

    private static GameManager m_instance;
  • 싱글톤 패턴
  • 외부 스크립트에서 instance를 통해 자유롭게 GameManager에 접근할 수 있다.
    void Start()
    {
        leftScore = 0;
        rightScore = 0;
    }

    public void AddScore(bool isLeftwin)
    {
        if(isLeftwin)
        {
            leftScore++;
            leftScoreText.text = leftScore.ToString();
        }
        else
        {
            rightScore++;
            rightScoreText.text = rightScore.ToString();
        }
    }
  • Start 함수에서 점수를 0으로 초기화한다
  • AddScore을 통해 이긴 편의 점수를 1씩 올리고, 그 점수를 ui에 반영시킨다.

 

스크립트 적용

  • Create Empty를 이용해 빈 오브젝트 생성
  • 오브젝트에 GameManager 적용
  • GameManager의 Text부분들을 해당 Text 할당시키기

결과

  • 게임이 진행되면서 골을 넣으면 점수를 얻고, 그 사실을 ui를 통해 알 수 있다.