쉽게 배우는 모바일 게임 1주차 빗물 받는 르탄이 마무리
점수 시스템 구현하기
UI 만들기
Hierarchy(왼클)->UI->Legacy->Text 을 통해 Canvas위에 Text 박스를 생성할 수 있다.
*싱글톤(Singleton): 게임맨저에서 만든 기능을 다른 스크립트에서 불러올 수 있게 하는 사전 작업
//GameManager class
public static GameManager Instance;
private void Awake()
{
Instance = this;
}
딱 저렇게만 설명해주셔서 조금 더 찾아보니
싱글톤은 클래스의 인스턴스를 하나만 유지하도록 보장하는 디자인 패턴이라고 한다.
유니티에서는 주로 게임매니저, 사운드매니저 등 전역에서 접근이 필요한 객체에 사용되고,
static 변수와 DontDestroyOnLoad를 조합해 씬 전환에도 인스턴스를 유지하도록 구현한다고 한다.
GameManager에 점수 시스템 셋업
//GameManager class
int totalScore;
//점수더하는 메소드 생성
public void AddScore(int score)
{
totalScore += score;
Debug.Log(totalScore);
}
르탄이에게 Player 태그 설정 후 충돌 감지
//Rain Script //OnCollisionEnter2D 메소드
if (collision.gameObject.CompareTag("Player"))
{
GameManager.Instance.AddScore(score);
Destroy(this.gameObject);
}
*르탄이에게 BoxCollider2D 컴포넌트 추가하는 것 잊지 않기
*BoxCollider2D 컴포넌트의 Edit Collider 기능을 이용해 충돌 판정 박스를 조정할 수 있다.
점수 UI에 반영하기
//GameManager Script
using UnityEngine.UI;
//GameManager class
public Text totalScroeTxt;
//AddScore()
totalScroeTxt.text = totalScore.ToString();
*유니티 게임매니저 인스펙터에서 TotalScoreTxt와 Score 오브젝트 연결해주는 것 잊지 말기!
타이머 시스템 만들기
UI만들기
Hierarchy(왼클)->UI->Image //EndPanel
EndPanel의 크기게 맞추는 Text 생성
Hierarchy(왼클)->UI->Legacy->Text //인스펙터->Rect Transform ->Anchor Presets(stretch 박스)에서 Alt+Shift 원하는 Preset 설정 가능
인스펙터-이름 옆의 체크박스를 해제하면 안보여지게됨.
EndPanel은 게임이 종료되었을때만 보여져야하므로 체크 해제.
시간 감소 및 게임 멈추기
//GameManager class
public Text timeTxt;
//GameManager Update()
if (totalTime > 0)
{
totalTime -= Time.deltaTime; //프레임 대비로 맞춰준 시간 값. 모든 기기들이 같은 시간 값을 가질수 있도록 조정.
}
else
{
totalTime = 0; //미세한 오차 발생 가능 방지
Time.timeScale = 0f; //Time의 크기를 0으로 설정. 1은 기본 속도, 2는 2배속과 같으므로 0은 시간이 정지된 것과 같은 효과.
}
timeTxt.text = totalTime.ToString("N2"); //N2: 소숫점 둘째자리까지만 출력
EndPanel UI 띄우기
//GameManager class
public GameObject endPanel;
//Update()에서 시간이 초과되었을 때 게임을 멈춘 뒤,
endPanel.SetActive(true);
재시작 기능
EndPanel 버튼화
EndPanel에 Button 컴포넌트 추가
//RetryButton Script
using UnityEngine.SceneManagement;
//RetryButton class
public void Retry()
{
SceneManager.LoadScene("MainScene");
}
EndPanel에 RetryButton script 컴포넌트 추가한 뒤
EndPanel Button 컴포넌트에서 Onclick() 이벤트 설정
오브젝트: EndPanel, 메소드: RetryButton.Retry
시간 다시 흐르게 하기
Time.timeScale = 1.0f;
숙제: 빨간 빗방울 만들기 (충돌 시 5점 감점)
간단히 Rain Script Start() 메소드에서 타입 랜덤을 설정할 때 범위 값을 (1, 4)가 아닌 (1, 5)로 변경해주면 1, 2, 3, 4 값이 랜덤으로 생성된다.
기존에 설정한 1, 2, 3 타입이 아니라 4 타입을 빨간 빗방울로 만들어주려면 이후 if ~ else if 문 하단에 아래와 같은 코드를 추가해주었다.
else if (type == 4)
{
size = 0.8f;
score = -5;
renderer.color = new Color(255 / 255f, 100 / 255f, 255 / 255f, 1f);
}
Build 내보내기
이건 강의 과정은 아니고, 기념 삼아 개인적으로 Build를 내보내보려고 하는 데 계속해서 에러가 떴다.
Assets\Scripts\Rain.cs(3,19): error CS0234: The type or namespace name 'UI' does not exist in the namespace 'UnityEditor' (are you missing an assembly reference?)
에러를 먼저 살펴보니 UnityEditor에서 문제가 생긴것 같았다.
구글링해보니 UnityEditor 네임스페이스는 에디터 안에서만 동작하고 빌드 시에는 포함되지 않기 때문이라고.
#if UNITY_EDITOR
using UnityEditor;
#endif
이렇게 조건부 컴파일로 감싸주는 해결방안을 얻었고 빌드를 완료했다.
근데 위 이미지와 같이 텍스트들이 아래로 밀려난다.
유니티 에디터에서 실행했을때는 문제없이 출력되던 것이 자리를 벗어나는 것이다.
전체화면일때는 저렇게라도 조금 보이지, 창모드로 전환하면 아예 텍스트가 보이지 않는다.
해결하려고 Canvas 설정 확인하는 법을 구글링해보고 적용했지만 그대로였다...
빌드 셋팅에서 Player-Resolution and Presentation에서 해상도를 조절해보았지만 되지 않았다.
일단 오늘 저녁은 일이 있어서 이렇게 두고 주말에 조금 더 방법을 찾아본 뒤에 안되면 튜터님께 가서 물어보려고 한다.
참, 어플리케이션을 실행 중일때 종료를 하는 기능도 추가해주었는데, (안그러면 Alt+F4를 써야한다)
if (Input.GetKeyDown(KeyCode.Escape)) //ESC 버튼을 눌렀을 때
{
Application.Quit(); //앱 종료.
}
코드가 참 간단했지만, 실제 게임에서는 종료 정말 할건지 체크도 하고 세이브도 해야하니 복잡해질것 같다.
느낀점
오늘은 집중이 잘 되지 않았다. 습하고 날씨가 구리구리해서 다친 발목이 쑤시더라ㅠㅠ
내년 이사까지 부모님 댁에서 지내야해서, 급하게 앉은뱅이 책상에서 하고 있는데 허리가 너무 아픈 것도 한 몫했다.
얼른 책상 세팅을 완료해야 12시간 수업도 하고, 웹캠 셋팅도 할텐데... 방치되고 있던 방을 언제 다 정리하나 싶다.
PC 본체도 얼른 조립을 해서 쓸거면 쓰고, 아니면 말고... Github recovery key 값도 거기에 있을텐데... :(
모니터는 도착했다! 주말동안 시간이 있으니 조립해서 환경을 구축해둬야겠다.
내일 학습 할 것은 무엇인지
위에서 발생했던 빌드 시 UI 범위 벗어남 현상을 고쳐보고 싶다.
그리고 2주차 강의를 완료하는 것이 목표다.
강의 시간을 보니 1시간 23분 정도라서, 실습하는 시간을 고려해봐도 하루 만에 완강할 수 있지 않을까 싶다.
'부트캠프 > 사전캠프' 카테고리의 다른 글
[내일배움 사전캠프_2025JUN17]쉽게 배우는 모바일 게임 2주차 - 풍선을 지켜라 (0) | 2025.06.17 |
---|---|
[내일배움 사전캠프_2025JUN16] 콘솔 행맨 게임 (1) | 2025.06.16 |
[내일배움 사전캠프_2025JUN12] 쉽게 배우는 모바일 게임 1주차 - 빗물 받는 르탄이 1 (1) | 2025.06.12 |
[내일배움 사전캠프_2025JUN11] 유니티 퀘스트 개인과제 (4) | 2025.06.11 |
[내일배움 사전캠프_2025JUN10]온보딩, 유니티 조사 (0) | 2025.06.10 |