🎮 오늘 만든 게임: Stack Game
블록이 좌우 혹은 전후로 움직이며 위로 쌓인다.
정확히 쌓이지 않으면 잘려나가고, 잘린 조각은 떨어지며 점수와 콤보가 갱신된다.
단순한 룰 같지만 구현은 쉽지 않았고, 특히 UI 시스템과 상태 전환, 그리고 블록의 위치·크기 보정이 꽤 까다로웠다.
📌 오늘의 학습 요약
🧱 1. TheStack – 게임의 본체
TheStack.cs는 게임 전체 로직을 담고 있다.
- Spawn_Block(): 블록 생성 및 배치
- MoveBlock(): PingPong을 이용한 좌우/전후 블록 이동
- PlaceBlock(): 배치 및 자르기, 콤보 체크
- GameoverEffect(): 리지드바디를 추가하여 연출 발생
- Restart(): 게임 재시작 초기화
여기서 중요한 깨달음:
현재 TheStack이 사실상 GameManager 역할까지 떠맡고 있음.
UIManager는 별도로 존재하지만, 게임의 상태, 점수 관리, 효과 처리까지 전부 TheStack 내부에서 하고 있다.
📌 그래서 코드가 '무겁다'.
하나의 스크립트에 많은 책임이 쏠리게 되며 유지보수성, 재사용성, 가독성 등이 떨어진다.
이에 따라, 왜 Unity에서 일반적으로 GameManager, UIManager, ScoreManager, SoundManager 등을 따로 두고, 각 기능을 객체 단위로 분리하는지가 더더욱 명확히 이해되었다.
🧩 2. UI 구조: BaseUI + UIManager
상태 기반으로 UI를 관리했다.
UIState enum을 기반으로, 현재 상태에 따라 필요한 UI만 SetActive()로 표시되도록 함.
- BaseUI 클래스: 모든 UI 클래스의 공통 기반
- HomeUI: 시작, 종료 버튼
- GameUI: 점수, 콤보 표시
- ScoreUI: 최종 결과, 최고 기록 표시
📌 특히 UIManager처럼 객체를 분리한 구조는 유지보수에도 훨씬 효율적이었다.
초기화, 이벤트 바인딩, 상태 전환이 구조적으로 관리되니 훨씬 직관적이고 안정적인 느낌.
🧪 3. 수학 함수 & 물리 개념
| Mathf.Lerp(a, b, t) | a~b 사이를 t 비율로 보간 |
| Mathf.PingPong(t, length) | 0 ~ length를 반복하는 수평 왕복운동 |
| Renderer.material.color | 오브젝트 색상 적용 |
| Rigidbody | 물리 효과 부여 (파괴 연출에 사용됨) |
| PlayerPrefs | 로컬 저장소에 정수/문자열/float 저장. 민감한 데이터에는 부적절 |
🔍 사용한 테크
- TextMeshPro: UGUI보다 텍스트 표현이 정교함
- Find("경로"): 트랜스폼 기준으로 자식 오브젝트 탐색
- Button.onClick.AddListener(): 버튼 클릭 이벤트 등록
- Inspector 연결 대신, 코드로 UI 제어: 조금 어렵지만 확실히 더 깔끔하고 유지보수 쉬움
🔧 유용한 팁 및 단축키
| 씬/게임 뷰 전환 | Shift + Space | 전체 화면 보기 |
| 오브젝트 보기 이동 | F | 선택 오브젝트로 시야 고정 |
| 카메라 대쉬 | Shift + WASD | 빠른 이동 |
| 스냅 정렬 | Ctrl + 드래그 | 정렬선에 붙음 |
| 프로젝트 세팅 열기 | Ctrl + T | 커스텀 단축키 지정 |
💬 사담 및 회고
“코드에 둘러싸인 개발자 느낌 나는데요…?”
진짜다. 오늘은 Inspector 없이도 UI, 게임 로직을 완전히 통제했다.
버튼 클릭도 직접 이벤트 연결, 게임 상태도 직접 제어, 점수도 직접 저장하고 갱신했다.
그와 동시에 너무 많은 책임이 한 클래스에 쏠리면 코드가 무거워지고, 관리가 어려워진다는 걸 절실히 체감했다.
UIManager처럼, 역할이 나뉘고 책임이 분리될 때 코드가 더 유연해지고 협업이나 유지보수에도 강해진다는 걸 실제로 경험할 수 있었다.
앞으로 코드를 작성할 땐, 기능을 기능대로 나눠서 설계하고 구현하자.
기능이 명확하게 나눠질수록, 내가 보기에도 다른 사람이 보기에도 훨씬 나은 코드가 된다.
🏁 오늘의 결론
- Stack 게임을 통해 Unity의 다양한 기능과 구조를 체험했다.
- 단순한 게임에도 수많은 코드 설계와 객체 분리가 필요하다는 것을 깨달았다.
- “기능을 나누는 이유”를 이론이 아니라, 코드로 경험했다.
'팀스파르타 내일배움캠프' 카테고리의 다른 글
| 📚 TIL - 2025년 05월 05일 (월) / 강의에 나온 개념 정리 (1) | 2025.05.05 |
|---|---|
| 📚 TIL - 2025년 5월 1일 (목) / 본격 구현 단계 진입 (2) | 2025.05.01 |
| 📚 TIL - 2025년 4월 29일 (화) / 발제 및 유니티 주간의 시작 (0) | 2025.04.29 |
| 📚 오류 수정록 - 2025년 4월 28일 (월) / Unity Collaborate 패키지 오류 해결 기록 (0) | 2025.04.28 |
| 📚 TIL - 2025년 4월 25일 (금) / 와이어프레임과 구조설계, 조별과제 완료 (0) | 2025.04.25 |