스파르타 게임개발종합반(Unity)/사전캠프 공부 기록

[Unity/2D] 빗방울과 플레이어 충돌 체크 및 점수 올리기 - Singleton(싱글톤) 패턴

테크러너 2024. 3. 28.

이전편

2024.03.28 - [Unity/2D] - [Unity/2D] 점수 보드 만들기 - UI(User Interface)

 

싱글톤 패턴

GameManager에 점수를 올려주는 기능을 만들건데, 이 기능을 다른 스크립트에서 불러올 수 있게끔 사전작업을 먼저 해주겠습니다.

그래서 '싱글톤'이라는 것을 만들 건데요, 싱글톤이라는 것은 나 하나밖에 없다 라는 것입니다.

한마디로 '이 프로젝트에서 GameManager라는 객체는 나 하나밖에 없다' 그리고 '여러 스크립트에서 접근이 가능하게 만들어주는 기능'이라고 생각해주시면 될 것 같습니다.

 

GameManager.cs

    public static GameManager Instance; // 싱글톤을 위한 변수생성

    private void Awake()
    {
        Instance = this; // Instance 변수에 this(내 자신의 데이터)를 넣어준다.
    }
 

위와 같이 코드를 작성했습니다.

싱글톤의 로직은 이것보다 더 복잡하지만 지금은 이정도로만 적고 점점 더 추가해나갈 것입니다.

 

싱글톤 더 추가된 내용

2024.04.01 - [Unity/2D] - [Unity/2D] GameManager 싱글톤 패턴 - Singleton

 

 

점수 올려주는 기능

    int totalScore;  
 
    // 점수를 올려주는 기능 
    public void AddScore(int score)
    {
        totalScore += score;
        Debug.Log(totalScore);
    }
 

게임매니저에 점수를 올려주는 기능을 해주는 AddScore 함수를 생성해주었습니다.

 

 

 

빗방울과 르탄이 간의 충돌 체크 및 점수 올리기

이제 르탄이가 빗방울을 맞는 것을 알게 해주는 스크립트를 작성해보겠습니다.

 

Rain.cs

    // 충돌이 일어났을 때 호출되는 이벤트 함수
    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 충돌된 게임 오브젝트의 태그가 "Ground"일 때
        if(collision.gameObject.CompareTag("Ground"))
        {
            // 충돌된 게임 오브젝트 파괴(빗방울 파괴)
            Destroy(this.gameObject); // this == 현재 이 스크립트가 부착된 게임 오브젝트
        }

        // 르탄이와 충돌했을 때

    }
 

저번에 작성했었던 충돌처리 함수인데요.

르탄이와 충돌했는지를 알기 위해 르탄이에게 태그를 붙여주겠습니다.

 

이렇게 르탄이에게 'Player' 태그를 달아주었습니다.

 

    // 충돌이 일어났을 때 호출되는 이벤트 함수
    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 충돌된 게임 오브젝트의 태그가 "Ground"일 때
        if(collision.gameObject.CompareTag("Ground"))
        {
            // 충돌된 게임 오브젝트 파괴(빗방울 파괴)
            Destroy(this.gameObject); // this == 현재 이 스크립트가 부착된 게임 오브젝트
        }

        // 르탄이와 충돌했을 때
        if (collision.gameObject.CompareTag("Player"))
        {
            GameManager.Instance.AddScore(score);
            Destroy(this.gameObject); // 르탄이와 충돌한 빗방울 오브젝트 파괴
        }
    }
 

이렇게 르탄이와 빗방울이 충돌했을 때 점수가 올라가도록 코드를 작성했습니다.

 

 

싱글톤 활용 - public으로 설정된 점수 올려주는 함수 불러오기

GameManager.cs 안에 MakeRain() 함수는 private, AddScore() 함수는 public입니다.

게임매니저 인스턴스로 불러올 수 있는 함수는 AddScore() 함수뿐입니다.

이유는 public으로 설정되어 있기 때문이죠.

 

 

마지막으로 르탄이에게 박스콜라이더를 달아주면 빗방울과 충돌이 될 것입니다!

 

 

결과

콘솔창에 점수가 잘 뜨는 것을 확인할 수 있습니다.

그렇다면 이제 이 점수를 'Score'이라는 텍스트에 나타날 수 있게 하면 되겠죠?

 

 

점수 보드에 Score 텍스트 숫자값 나타내기

GameManager.cs

using UnityEngine.UI;

    public Text totalScoreTxt;
  
    // 점수를 올려주는 기능
    public void AddScore(int score)
    {
        totalScore += score;
        totalScoreTxt.text = totalScore.ToString(); // totalScore(int형)을 string형으로 변환 필요
    }

 

ToString()은 숫자자료형을 string형으로 변환해주는 기능입니다.

 

 

결과

 

 

 

 

모바일 화면 크기 설정이 궁금하다면?

2024.03.28 - [Unity/기타] - [Unity] 모바일 크기 설정 / 디스플레이 설정

 

반응형

댓글