학습 목표
3교시의 도착점
교수자의 장면을 그대로 복제하는 시간이 아닙니다. 같은 기능 계약을 자신의 기존 프로젝트에 통합하고 테스트로 완료 여부를 판단합니다.
- 01
Ready, Playing, Won, Lost가 분리된 하나의 게임 상태 흐름을 완성합니다.
- 02
점수와 시간 HUD, Start와 Result Panel을 현재 데이터와 상태에 맞게 표시합니다.
- 03
수집, 성공과 실패에 서로 구분되는 효과음을 연결합니다.
- 04
필수 테스트 8개를 모두 PASS하고 Editor 밖의 빌드에서 전체 루프를 재현합니다.
미션 계약
목표는 고정하고 구현 경로는 선택합니다
아래 행동과 결과는 모두 충족해야 합니다. UI를 먼저 만들지, 상태 코드를 먼저 연결할지, 기존 수집물을 먼저 점검할지는 각자 결정합니다.
60분 안에 Start 버튼으로 시작해 30초 동안 수집물 3개를 모으면 성공하고, 시간이 먼저 0이 되면 실패하며, 어느 결과에서도 깨끗하게 재시작되는 2D 게임 Scene을 완성합니다. 마지막에는 실제 빌드에서 전체 흐름을 검증합니다.
한 번에 하나의 상태
Ready, Playing, Won, Lost 중 하나만 현재 상태입니다. 여러 bool이 동시에 결과를 나타내지 않습니다.
점수와 시간 표시
Ready에서 0 / 3과 30.0을 보이고 Playing에서 실제 데이터와 함께 갱신합니다.
정확히 한 번의 수집
각 수집물은 Player 접촉 한 번에 점수 1, 효과음 1회와 비활성화 1회를 일으킵니다.
서로 배타적인 성공과 실패
목표가 먼저면 Won, 시간이 먼저면 Lost입니다. 결과 뒤 타이머와 추가 점수는 멈춥니다.
초기 상태 완전 복원
두 결과의 Restart 모두 점수, 시간, 수집물, Panel과 게임 시간 흐름을 처음으로 되돌립니다.
Editor 밖에서 같은 동작
Week07_Preflight Scene을 Scene List에 포함하고 실제 빌드에서 성공, 실패와 재시작을 재현합니다.
고정 조건과 선택
검증할 행동과 표현 선택을 구분합니다
목표지향 실습은 아무렇게나 만드는 시간이 아닙니다. 테스트에 필요한 값은 고정하고, 게임의 인상을 만드는 선택은 학생에게 남깁니다.
모두 같아야 하는 행동
목표 3개, 제한 30초, 네 상태, 세 효과음, Start와 Restart, 필수 테스트 8개와 실제 빌드는 변경하지 않습니다.
각자 선택할 표현
HUD 위치, Panel 크기, 색, 글꼴, 문구, AudioClip과 수집물 배치는 자유입니다. 단, 정보가 읽히고 플레이를 가리지 않아야 합니다.
시작 상태
작동하는 기존 Scene을 복제해 시작합니다
이 주차는 UI만 새로 붙이는 실습이 아닙니다. 이전 주차의 이동, 충돌, 수집, Animation과 Camera가 정상인 상태 위에 게임 루프를 통합합니다.
File → Save As이전 주차 Scene을 덮어쓰지 않고 Assets/Scenes/Week07_Preflight.unity로 저장합니다.
Build Profiles → Scene List저장 직후 Add Open Scenes로 새 Scene을 Scene List에 등록하고 체크를 켭니다. 그래야 이후 RestartScene()의 buildIndex 테스트가 유효합니다.
Play → Move → Collect새 기능을 붙이기 전에 이동, 벽 충돌, Camera와 기존 Trigger가 여전히 작동하는지 확인합니다.
Console → Clear기존 빨간 오류를 먼저 해결합니다. 이전 오류와 새 UI 오류가 섞이면 원인을 판단하기 어렵습니다.
Period 02 reference기준 코드가 필요하면 2교시 GameManager와 Collectible을 읽고 현재 Scene에 맞게 적용합니다. 세 Collectible을 함께 선택해 gameManager가 모두 Scene의 GameManager를 가리키는지도 확인합니다.
자율 실습 경로
클릭 순서 대신 중간 도착점을 확인합니다
아래 시간은 권장 배분입니다. 막힌 지점과 자신의 강점에 따라 순서를 바꿀 수 있지만, 45분에는 Editor 테스트를 시작하고 52분에는 빌드 단계로 넘어갑니다.
여섯 개의 중간 도착점
Individual work
- 계약과 Scene 등록
Scene을 복제해 저장하고 Scene List에 등록한 뒤, 고정 목표와 제출 증거를 확인합니다.
- UI와 참조 준비
HUD, StartPanel, ResultPanel, AudioSource와 GameManager의 참조를 연결하고, 세 Collectible의
gameManager도 할당합니다. - 상태와 사건 연결
Start, 타이머, 수집 점수, Won과 Lost가 한 상태 흐름 안에서 동작하게 합니다.
- 피드백과 재시작
세 효과음, 결과 문구와 Restart를 연결하고 두 종료 상태에서 다시 시작해 봅니다.
- Editor 검증
T01부터 T07까지 실행하며 한 번에 한 원인만 수정하고 관찰 내용을 기록합니다.
- Build와 증거
Scene List 등록 상태를 재확인하고 Build and Run, T08 전체 루프, CSV와 화면 증거 파일명을 확인합니다.
- STATE
네 상태가 배타적
- HUD
점수·시간이 데이터와 일치
- EVENT
수집 1회에 점수 1
- RESULT
성공·실패가 한 번만 발생
- BUILD
실행 파일에서 재현
최소 인터페이스
구조가 달라도 책임은 분명해야 합니다
아래는 2교시 기준 구현의 최소 인터페이스입니다. 이름을 바꾸거나 Script를 나눠도 되지만 각 책임의 소유자와 호출 방향이 명확해야 합니다.
GameStateReady, Playing, Won, Lost 중 현재 하나를 저장합니다.
StartRound()값을 초기화하고 Playing을 시작합니다.
AddScore(1)Playing에서만 점수와 수집 피드백을 갱신합니다.
RestartScene()현재 Scene과 실행 데이터를 처음으로 되돌립니다.
| 책임 | 가능한 위치 | 관찰 가능한 기준 |
|---|---|---|
| 점수와 목표 | GameManager 또는 별도 Score 모델 | UI 문자열을 읽지 않고 정수 데이터로 성공 판정 |
| 타이머 | Playing 상태의 Update | 30.0에서 감소, 0 아래로 내려가지 않고 결과 뒤 정지 |
| 상태 전환 | 한 관리자 Script | Won과 Lost가 동시에 발생하지 않고 종료 함수가 한 번만 실행 |
| UI 출력 | 한 UpdateHud 함수 또는 명확한 View | 저장 데이터가 바뀐 직후 Text와 Panel이 같은 사실 표시 |
| 효과음 | GameManager의 AudioSource | 수집, 성공, 실패 사건마다 대응 Clip이 정확히 한 번 재생 |
| 재시작 | Scene 재로드 또는 동등한 전체 Reset | 두 결과에서 값, 수집물, UI와 게임 시간이 모두 초기 상태 |
검증 관문
필수 테스트 8개로 완료를 증명합니다
기대 결과와 실제 결과를 비교해 판정합니다. FAIL을 숨기지 말고 관찰한 첫 현상과 바꾼 한 가지를 기록한 뒤 같은 조건으로 다시 실행합니다.
| ID | 조작·조건 | 기대 결과 | 판정 | 관찰·수정 기록 |
|---|---|---|---|---|
| T01 | Scene을 열고 Play, Start를 누르지 않음 | StartPanel 표시, 점수 0 / 3, 시간 30.0 고정, 플레이 정지 | ||
| T02 | Start 버튼을 한 번 클릭 | StartPanel 숨김, Player 이동 가능, 시간이 30.0에서 감소 | ||
| T03 | 수집물 하나에 한 번 접촉 | 점수 1 / 3, Collect 음 1회, 해당 수집물만 사라짐 | ||
| T04 | 30초 안에 세 수집물을 모두 획득 | 3 / 3, 성공 Panel과 Win 음 1회, 시간과 추가 점수 정지 | ||
| T05 | 목표 전에 시간이 0이 되도록 기다림 | 시간 0.0, 실패 Panel과 Lose 음 1회, 타이머와 수집 정지 | ||
| T06 | Won과 Lost에서 각각 Restart 클릭 | 두 경우 모두 Ready, 0 / 3, 30.0, 수집물 3개와 StartPanel 복원 | ||
| T07 | Game View 16:9와 4:3에서 실행, Console 확인 | HUD와 Button이 겹치거나 잘리지 않고 Console Error 0 | ||
| T08 | Build and Run 후 Start → Won → Restart → Start → Lost → Restart | 실행 파일에서 두 라운드가 끊김 없이 재현되고 각 Restart 뒤 Ready가 정상 | ||
| T09 선택 | 연속으로 두 수집물을 빠르게 획득 | 두 Collect 음을 들을 수 있고 점수가 정확히 2 증가 |
테스트 기록은 이 브라우저에, 학번과 이름은 현재 탭에만 저장됩니다.
디버깅 순서
증상이 보이면 원인에 가까운 층부터 봅니다
UI 색이나 글꼴부터 바꾸지 않습니다. 현재 상태, 실제 데이터, 사건 호출, Inspector 참조, 마지막 출력 순서로 처음 어긋난 지점을 찾습니다.
Start를 눌러도 시간이 줄지 않습니다
State: CurrentState가 Playing인지 봅니다. Time: Time.timeScale이 1인지 확인합니다. Button: On Click이 Scene의 GameManager와 StartRound를 가리키는지 확인합니다.
점수 글자가 바뀌지 않거나 Null 오류가 납니다
Data: Debug Inspector나 로그로 score가 변하는지 봅니다. 변한다면 Reference: scoreText 필드에 TMP_Text가 연결되었는지, Output: UpdateHud가 호출되는지 확인합니다.
한 수집물에서 점수가 두 번 오릅니다
Collectible의 collected guard와 SetActive 순서를 확인합니다. Player에 Collider가 여러 개라면 같은 Trigger가 여러 접촉 사건을 받을 수 있으므로 한 번 처리한 사실을 먼저 기록합니다.
시간이 음수로 내려가거나 결과 뒤에도 변합니다
Mathf.Max(0f, ...)로 0에 고정하고, Update 시작에서 Playing이 아니면 return하는지 확인합니다. FinishRound를 매 프레임 반복 호출하지 않아야 합니다.
효과음이 들리지 않습니다
AudioSource, Clip 참조, Mute, Volume, Audio Listener 순서로 확인합니다. Scene 안의 Audio Listener는 보통 Main Camera에 하나만 있어야 합니다.
Restart가 Editor 또는 빌드에서 실패합니다
using UnityEngine.SceneManagement;, public 함수와 Button On Click을 확인합니다. 빌드에서는 Scene List 포함 여부와 체크 상태를 추가로 확인하고, 로드 전에 Time Scale을 1로 복원합니다.
AI 사용 경계
완료 증거는 직접 확인한 결과입니다
1주차에 설치한 CLI와 MCP는 계속 사용합니다. 코드와 Scene을 바꾸더라도 완료 기준은 Console, Inspector, Play Mode에서 학생이 직접 확인한 결과입니다. 설명하지 못하는 변경은 제작 증거로 인정하지 않습니다.
원인 후보와 확인 순서 묻기
현재 상태, 실제 현상, 기대 결과, Console 첫 오류와 이미 확인한 참조를 포함합니다. 답을 받은 뒤 한 단계씩 직접 확인합니다.
그림과 소리는 아직 만들지 않기
Sprite와 Sound 생성은 9주차 이후입니다. 이번 주 완료 증거는 회색 게임의 상태 흐름과 빌드입니다.
제출물
중간고사 전 사전 점검 증거를 남깁니다
파일 수를 늘리는 것이 목적이 아닙니다. 다른 사람이 Scene과 빌드를 열고 같은 테스트를 다시 수행할 수 있을 만큼만 정확히 남깁니다.
Week07_Preflight.unity
GameManager, Canvas, 세 Collectible과 기존 Player·Camera가 연결된 최종 Scene입니다.
GameManager.cs · Collectible.cs
현재 프로젝트에서 실제로 사용한 상태 관리와 수집 사건 Script입니다.
Week07_학번_이름
수업 컴퓨터의 데스크톱 플랫폼에서 실행 가능한 빌드 폴더 전체입니다.
week07_학번_이름_test.csv
이 페이지에서 저장한 T01부터 T08의 판정과 관찰·수정 기록입니다.
week07_play.png
Player, 수집물, 점수와 시간이 함께 보이는 Playing 화면입니다.
week07_result.png
결과 Panel과 Restart Button이 보이는 Won 또는 Lost 화면입니다.
제출 전 마지막 확인
체크 상태는 이 브라우저에 자동 저장됩니다.
공식 자료
막혔을 때 확인할 Unity 공식 자료
검색 결과보다 현재 사용하는 Unity 버전의 공식 문서를 먼저 확인합니다.
- Canvas ↗Unity UI 2.0의 화면 공간 UI와 Render Mode
- AudioSource.PlayOneShot ↗Unity 6.6에서 짧은 효과음을 한 번 재생하는 함수
- SceneManager.LoadScene ↗현재 Scene을 이름 또는 buildIndex로 다시 불러오는 방법
- 빌드의 씬 관리 ↗Build Profiles의 Scene List에 현재 Scene을 포함하는 절차
- 빌드 프로파일 창 레퍼런스 ↗Build, Build and Run과 Development Build 설정