이전편
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으로 설정된 점수 올려주는 함수 불러오기

게임매니저 인스턴스로 불러올 수 있는 함수는 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] 모바일 크기 설정 / 디스플레이 설정
'스파르타 게임개발종합반(Unity) > 사전캠프 공부 기록' 카테고리의 다른 글
[Unity/2D] 게임 재시작 및 버튼 만들기 - On Click, Button, Time.timeScale (0) | 2024.03.28 |
---|---|
[Unity/2D] 시간 감소 및 게임 종료, 프레임 - anchor(앵커), Time.deltaTime, Time.timeScale, ToString (0) | 2024.03.28 |
[Unity/2D] 점수 보드 만들기 - UI(User Interface) (0) | 2024.03.28 |
[Unity] 빗방울 프리팹 반복 생성 - Instantiate(), InvokeRepeating() (0) | 2024.03.28 |
[Unity/2D] 빗방울 랜덤 생성하기 - Random.Range, renderer.color (0) | 2024.03.28 |
댓글