3교시의 도착점
교수자의 완성 화면을 재현하지 않습니다. 같은 시스템 계약 안에서 각자의 경로를 만들고, 다른 사람이 반복할 수 있는 조건으로 결과를 검증합니다.
- 형식개인 목표지향 실습
- 성공 조건필수 8 / 8 PASS
- 레벨 구성Collect 3 / Hazard 2 / Goal 1
- 01
Ground와 Collision Tilemap으로 30-60초 분량의 짧은 경로를 설계합니다.
- 02
하나의 Prefab 원본에서 만든 수집물 3개와 위험 구역 2개를 배치합니다.
- 03
수집물 세 개를 모두 얻기 전에는 닫히고 이후에는 성공하는 Goal 1개를 연결합니다.
- 04
필수 테스트 8개를 모두 PASS하고 CSV, 영상, 설명으로 근거를 남깁니다.
- 계약 해석
고정된 수량, 금지 조건과 제출 증거를 읽고 먼저 해결할 두 항목을 정합니다.
- 최소 사건
수집물 하나가 PlayerProgress를 정확히 한 번 바꾸는 상태를 만듭니다.
- 공간과 시스템
두 Tilemap, Layer Matrix와 세 종류의 Interaction을 하나의 Scene에 연결합니다.
- 전체 경로
정확한 수량을 배치하고 시작에서 목표까지 플레이 흐름을 조정합니다.
- 검증과 수정
T01-T08을 실행하고 FAIL이 생긴 층에서 한 가지 원인만 바꿉니다.
- 증거 저장
8 / 8 PASS, Error 0, 영상과 제출 파일 이름을 마지막으로 확인합니다.
목표는 고정하고 경로와 순서는 선택합니다
아래 계약은 모두 충족해야 합니다. Trigger 하나부터 증명할지, 공간의 외곽을 먼저 만들지, Prefab 원본을 먼저 정리할지는 각자 선택합니다.
완료 여부는 겉모습이 아니라 필수 T01-T08의 재현 가능한 결과로 판단합니다.
- Scene
- Week05_MicroLevel
- Play length
- 30-60초
- Interactions
- 3 + 2 + 1
- Gate
- 8 / 8 PASS
4주차 이동 보존
WASD와 방향키 이동, 정지와 Wall 충돌이 계속 작동합니다. Player Tag와 PlayerProgress를 같은 Player에 둡니다.
두 Tilemap 분리
Ground는 화면 표시를, Collision은 Tilemap Collider 2D를 통한 물리 벽을 담당합니다. 책임이 Hierarchy 이름으로 보입니다.
수집물 정확히 3개
하나의 PF_Collectible 원본에서 세 Instance를 만듭니다. 각 Instance는 한 번만 개수를 올리고 사라집니다.
위험 구역 정확히 2개
하나의 PF_HazardZone 원본에서 두 Instance를 만듭니다. 접촉하면 시작 위치로 돌아가되 수집 개수는 유지합니다.
조건부 목표 정확히 1개
3개를 모으기 전에는 완료를 거절하고, 3개를 모두 모은 뒤 다시 들어가면 성공을 Console에 기록합니다.
필요한 접촉만 허용
Player와 Environment, Player와 Interaction은 켜고 불필요한 Layer 조합은 끕니다. 모든 Trigger는 Is Trigger를 사용합니다.
선택이 있는 짧은 경로
시작과 Goal이 구분되고, 세 수집물을 얻는 동안 적어도 한 번 위험을 피하거나 우회해야 합니다.
재현 가능한 검증
Console Error 0, 테스트 8 / 8 PASS와 45-60초 화면 영상을 남겨 다른 사람이 같은 결과를 확인하게 합니다.
하나의 Prefab, 정확히 세 Instance, 각각 한 번만 수집
하나의 Prefab, 정확히 두 Instance, 위치만 초기화
세 개를 모두 모았을 때만 완료를 허용
T01부터 T08까지 모두 PASS, Console Error 0
작동하는 4주차 결과에서 출발합니다
이동을 다시 만드는 실습이 아닙니다. 4주차 테스트를 통과한 Player를 보존하고, 별도 Scene에 이번 주의 공간과 사건만 추가합니다.
컴파일되는 스크립트 뼈대 4개
TODO Script 묶음
네 파일은 class와 event function의 외곽만 갖고 있어 오류 없이 컴파일됩니다. TODO 주석을 계약으로 읽고 2교시의 전체 흐름을 참고해 행동을 직접 완성합니다.
PlayerProgress.cs: 수집 개수, 필요 개수, 시작 위치Collectible.cs: 한 번의 수집 보고HazardZone.cs: Player 위치 초기화GoalZone.cs: 완료 조건 확인
한 상태 소유자
PlayerProgress 하나만 수집 개수와 시작 위치를 관리합니다. Trigger Script끼리 서로의 field를 직접 바꾸지 않습니다.
2D 물리만 사용
Collider2D, Rigidbody2D와 2D callback을 사용합니다. 3D Collider나 OnTriggerEnter와 섞지 않습니다.
일회성 사건을 반복하지 않기
Interaction Script에서 Update나 OnTriggerStay2D로 수집, 리셋, 완료를 반복 처리하지 않습니다.
범위를 장식으로 넓히지 않기
UI, 점수 화면, 효과음과 Animation은 이번 완료 조건이 아닙니다. 먼저 8개 동작 증거를 완성합니다.
권장 시작 상태
Week04_InputPhysics를 별도 Scene Week05_MicroLevel로 보존하고, Error 0과 4주차 이동, 충돌을 한 번 확인합니다. 바닥과 벽은 2교시 시연용 Tile Palette 또는 단순한 Tile Asset을 사용해도 됩니다. 미술 완성도는 평가하지 않습니다.
중간 도착점만 확인하고 순서는 스스로 고릅니다
아래 항목은 클릭 절차가 아닙니다. 각 문장이 실제 Scene에서 참인지 확인하고, 막힌 항목이 있으면 그 책임을 가진 Layer, Prefab, Script로 돌아갑니다.
수집물 하나와 Player가 겹치면 Console의 개수가 정확히 1 증가하고 수집물은 사라집니다.
Ground Tilemap은 지나갈 수 있고 Collision Tilemap의 벽은 Player를 막습니다.
세 Collectible과 두 Hazard가 각각 하나의 Prefab Asset에 연결되어 있습니다.
Hazard 뒤에도 수집 개수는 유지되고 Goal은 같은 PlayerProgress에 완료 여부를 묻습니다.
시작에서 세 수집물을 거쳐 Goal까지 이동할 수 있고, 위험 구역을 피할 공간이 있습니다.
다른 사람이 T01-T08을 같은 조건으로 실행해도 같은 PASS 결과를 얻습니다.
가장 작은 작동 단위부터 증명해도 좋습니다
완성된 맵을 먼저 만들 필요는 없습니다. 수집물 하나가 정확히 한 번 작동하는 작은 상태를 얻으면, 그 원본을 반복하고 Hazard와 Goal을 연결할 수 있습니다. 단, 어떤 순서를 택할지는 학생이 결정합니다.
필수 테스트 8개로 완료를 증명합니다
각 행의 조건을 정확히 만든 뒤 기대 결과와 실제 결과를 비교합니다. FAIL을 숨기지 말고 첫 현상과 바꾼 한 가지를 기록해야 수정 과정도 증거가 됩니다.
PASS 규칙
필수 T01-T08이 모두 PASS이고 Play 전후 Console Error가 0개여야 완료입니다. 추측으로 PASS를 고르지 말고 Game View, Hierarchy, Inspector 또는 Console에서 관찰한 근거를 메모합니다.
학번과 이름은 현재 탭에서만 유지되며, 탭을 닫으면 사라집니다.
| ID | 조작과 조건 | 기대 결과 | 판정 | 관찰과 수정 기록 |
|---|---|---|---|---|
| T01 | Scene을 열고 Play 시작 | Week05_MicroLevel이 실행되고 Console Error가 0개 | ||
| T02 | Player를 Ground와 벽 쪽으로 각각 이동 | Ground는 통과하고 Collision Tilemap의 벽은 통과하지 않음 | ||
| T03 | Hierarchy, Inspector와 Layer Matrix 확인 | Ground, Collision, Interactions가 분리되고 필요한 두 Layer 조합만 접촉 | ||
| T04 | 세 Collectible Instance를 차례로 통과 | Console 개수가 1 / 3, 2 / 3, 3 / 3으로 증가하고 각 수집물이 사라짐 | ||
| T05 | 첫 Collectible 경계에 들어간 뒤 그 자리에 잠시 머묾 | 해당 Collectible이 개수를 한 번만 올리고 중복 수집되지 않음 | ||
| T06 | Collectible 하나를 얻은 뒤 두 Hazard를 각각 접촉 | 두 구역 모두 Player의 속도를 멈추고 시작점으로 보내며 수집 개수 1은 유지 | ||
| T07 | 수집물 0-2개 상태에서 Goal 접촉 | 완료되지 않고 남은 수집물이 있다는 결과가 Console에 기록됨 | ||
| T08 | 새 Play에서 세 개를 모아 Goal까지 전체 경로 실행 | 30-60초 안에 완료 메시지가 나오고 전체 플레이 중 Error가 0개 |
FAIL은 사건이 멈춘 가장 가까운 층에서 찾습니다
한 번에 여러 설정과 코드를 바꾸면 어떤 변화가 해결했는지 알 수 없습니다. 화면에 나타난 첫 현상을 고르고, 해당 층의 한 조건만 확인합니다.
관찰하고, 위치를 찾고, 하나만 바꾼 뒤 다시 검사합니다
- 화면부터 기록
막힘, 통과, 사라짐, 위치 초기화, Console 수치 중 실제로 본 첫 현상을 씁니다.
- 책임 층 선택
그림은 Tilemap Renderer, 막힘은 Collider, 사건은 Trigger, 상대 확인은 Tag, 상태는 Script에서 찾습니다.
- 한 조건만 변경
Collider 형상, Is Trigger, Layer, Tag, Component, 코드 중 하나를 고쳐 원인과 결과를 연결합니다.
- 같은 테스트 반복
새 기능으로 넘어가기 전에 실패했던 조작과 조건을 그대로 다시 실행합니다.
Hint 01 / Event absentPlayer가 수집물을 통과하지만 아무 일도 일어나지 않습니다
두 GameObject의 Collider2D, Player의 Rigidbody2D, Collectible의 Is Trigger, Player와 Interaction Matrix를 순서대로 확인합니다. callback 안의 Debug.Log를 첫 줄에 잠시 두면 물리 사건과 코드 조건을 나눌 수 있습니다.
Hint 02 / Early returncallback은 오지만 수집 개수가 바뀌지 않습니다
other.CompareTag("Player")와 other.TryGetComponent(out PlayerProgress progress) 중 어느 조건에서 return되는지 확인합니다. Player Tag와 PlayerProgress가 Collider와 같은 GameObject에 있어야 현재 코드가 찾을 수 있습니다.
Hint 03 / Duplicate count수집 개수가 한 번에 여러 번 증가합니다
일회성 사건이 OnTriggerEnter2D에 있는지, collected를 true로 바꾸는 시점이 AddCollectible보다 늦지 않은지 확인합니다. Player에 같은 Collectible 처리 Script가 중복으로 붙지 않았는지도 봅니다.
Hint 04 / Hazard state위험 구역 뒤 수집 진행까지 사라집니다
ResetToStart가 위치만 바꾸는지 확인합니다. collectedCount를 0으로 바꾸거나 Scene을 다시 불러오면 이번 계약의 “진행 유지” 조건과 달라집니다.
Hint 05 / Goal always openGoal이 수집 개수와 관계없이 완료됩니다
완료 로그가 HasAllCollectibles()의 false 분기 뒤에 있는지 확인합니다. requiredCollectibles가 Inspector에서 3인지, Player가 수집한 바로 그 PlayerProgress를 Goal이 읽는지도 확인합니다.
AI 사용 범위
MCP와 Ask로 오류 문구, 공식 문서와 자신이 작성한 코드의 의미를 물을 수 있습니다. Generator는 이번 실습에서 사용하지 않습니다. 질문에는 먼저 자신의 예측과 확인한 조건을 포함하고, 설명하지 못하는 코드는 제출물에 남기지 않습니다.
작동 결과와 판단 근거를 함께 제출합니다
Scene만 제출하면 우연히 작동한 결과와 이해한 설계를 구분하기 어렵습니다. 프로젝트, 실행 증거, 테스트 기록과 짧은 설명을 하나의 묶음으로 제출합니다.
Unity 프로젝트
Assets, Packages, ProjectSettings를 포함합니다. Library, Temp, Logs, Obj는 제외합니다.
Week05_MicroLevel
Player, Grid 아래 두 Tilemap, Interactions 아래 3 / 2 / 1 Instance와 Prefab Asset 연결이 보존되어야 합니다.
45-60초 화면 기록
세 수집, 위험 접촉 한 번, 수집 전 Goal 거절과 최종 성공이 한 흐름 안에 보이게 녹화합니다.
CSV 검증표
이 페이지에서 학번과 이름, T01-T08 판정과 관찰 근거를 입력하고 CSV 저장 버튼으로 내려받습니다.
정확한 여섯 문장
Layer 분리, Trigger 조건, Prefab 반복, 상태 소유자, FAIL 한 건, 최종 수정의 이유를 한 문장씩 씁니다.
식별 가능한 묶음
GE1_W05_학번_이름.zip, GE1_W05_학번_이름.mp4와 페이지에서 만든 CSV를 같은 제출 항목에 올립니다.
제출 전 마지막 설명
“Player와 Interaction Layer가 만나고, Trigger callback이 PlayerProgress를 찾아 상태를 바꾸며, Goal은 그 상태에 완료 조건을 묻는다”를 자신의 Scene을 가리키며 코드 없이 말할 수 있으면 이번 주의 구조를 이해한 것입니다.
실습 중 확인할 Unity 6.6 공식 문서
기억에 의존해 Component를 무작정 바꾸지 않습니다. 막힌 책임에 해당하는 문서에서 조건과 API 형태를 확인합니다.
OnTriggerEnter2D ↗
2D Trigger callback의 함수 형태, other parameter와 Rigidbody2D 조건
Introduction to Tilemaps ↗
Grid와 Tilemap을 사용해 셀 단위 2D 레벨을 만드는 기본 구조
Tilemap Collider 2D ↗
Tile의 Collider Type이 물리 형상으로 변환되는 방식
Prefabs ↗
같은 Component와 property를 가진 GameObject 구성을 원본과 Instance로 재사용하는 기능
Layer Collision Matrix ↗
Layer 조합별 접촉 계산을 허용하거나 제외하는 Project 설정
Component.CompareTag ↗
callback에 들어온 Collider2D가 속한 GameObject의 Tag를 확인하는 API