Week 04 · Period 03 · Individual Goal Lab

여덟 가지 테스트를
통과하라

완성 방법은 하나가 아닙니다. 입력, 속도, 충돌이라는 고정된 목표를 읽고 자신이 정한 순서로 구현한 뒤, 관찰 가능한 결과로 작동을 증명합니다.

  • 형식개인 목표지향 실습
  • 성공 조건필수 8 / 8 PASS
  • 산출물Scene · Script · Evidence
주황색 플레이어 하나가 네 개의 벽 사이로 이동하며 두 줄로 놓인 초록색 검증 지점 여덟 개를 지나 목표 문으로 향하는 모습
GOAL은 하나, 구현 순서는 각자 다릅니다. 8 TESTS가 완료 여부를 결정합니다.

00 / ARRIVAL

3교시의 도착점

교수자의 화면을 그대로 재현하는 것이 아니라, 같은 요구사항을 스스로 해석하고 검증합니다.

  • 01

    WASD와 방향키로 움직이는 4방향 Player를 완성합니다.

  • 02

    직선과 대각선의 최대 속도를 같게 만들고 놓으면 멈추게 합니다.

  • 03

    정면과 대각선으로 접근해도 네 개 이상의 Wall을 통과하지 않게 합니다.

  • 04

    필수 테스트 8개를 모두 PASS하고 결과를 CSV와 화면 증거로 남깁니다.

01 / MISSION CONTRACT

목표는 고정하고 방법은 선택합니다

아래 사양은 모두 충족해야 합니다. 폴더를 먼저 만들지, Player를 먼저 구성할지, Input Actions부터 확인할지는 각자 결정합니다.

MISSION / WEEK04_INPUTPHYSICS

60분 안에 하나의 Player가 두 종류의 키보드 입력으로 일정한 속도로 움직이고, 손을 놓으면 멈추며, 네 개 이상의 Wall과 충돌하는 Scene을 완성합니다. 완료는 필수 테스트 8개의 PASS로 판단합니다.

REQUIRED 01 / INPUT

하나의 Move Action

Player / MoveValue / Vector2이며 WASD와 방향키의 2D Vector Composite를 모두 가집니다.

REQUIRED 02 / PLAYER

물리 기반 Player

Rigidbody2D, Collider2D, PlayerController를 사용합니다. Gravity Scale은 0이고 Z 회전은 고정합니다.

REQUIRED 03 / BEHAVIOR

예측 가능한 이동

입력은 Update에서 읽고, linearVelocityFixedUpdate에서 적용합니다. 대각선 크기는 1 이하입니다.

REQUIRED 04 / COURSE

검증 가능한 충돌장

Box Collider 2D를 가진 Wall을 네 개 이상 배치해 정면과 대각선 충돌을 반복해서 확인할 수 있게 합니다.

REQUIRED 05 / QUALITY

오류 없는 실행

Play 전후 Console Error가 0개이며, 하나의 Player를 두 Script나 Transform 코드가 동시에 움직이지 않습니다.

REQUIRED 06 / EVIDENCE

결과가 남는 검증

8개 테스트의 판정과 관찰 내용을 기록하고, 계기판과 코스가 보이는 화면 증거를 저장합니다.

완료의 정의 “움직여 보였다”가 아니라, 다른 사람이 같은 조건으로 다시 실행해도 8개 결과가 모두 PASS이면 완료입니다.

02 / STARTING LINE

시작 상태를 먼저 안전하게 만듭니다

기존 결과를 지키고, 실습 실패가 생겨도 돌아갈 수 있는 별도 Scene에서 시작합니다.

Project3주차 프로젝트
SceneWeek04_InputPhysics
Unity6.6
ConsoleError 0
File → Save As

3주차 Scene을 덮어쓰지 않고 Week04_InputPhysics라는 새 Scene으로 저장합니다.

Console → Clear

기존 오류가 있으면 새 코드의 오류와 섞입니다. 시작 전에 빨간 오류를 0개로 만듭니다.

PlayerControls.inputactions

패키지가 없을 때만 Input System을 설치합니다. Editor 재시작이 필요할 수 있으므로 초반에 확인합니다.

03 / SELF-DIRECTED ROUTE

작업 순서를 스스로 고릅니다

아래는 클릭 순서가 아니라 중간 도착점입니다. 각 도착점의 확인 문장이 참이 되면 다음 문제로 이동합니다.

권장 시간 · 순서 변경 가능

여섯 개의 중간 도착점

Individual work

  1. 계약 읽기

    Scene 이름, 성공 조건, 제출 증거를 확인하고 자신이 먼저 해결할 두 항목을 정합니다.

  2. 입력층 준비

    Move Action이 WASD와 방향키에서 올바른 Vector2를 만드는지 확인합니다.

  3. 물리층 준비

    Player와 Wall의 2D Component를 구성하고 Collider 경계가 Sprite에 맞는지 봅니다.

  4. 행동 연결

    2교시의 책임 구조를 참고해 입력 읽기와 속도 적용을 연결합니다.

  5. 테스트와 수정

    T01부터 순서대로 실행하고 FAIL의 첫 원인을 한 단계씩 좁힙니다.

  6. 증거 저장

    8 / 8 PASS, Console Error 0, 화면 기록과 파일명을 확인합니다.

  1. INPUT

    Move 값이 방향에 맞게 바뀜

  2. BODY

    Player에 2D 몸체와 경계가 있음

  3. CODE

    입력과 물리 책임이 분리됨

  4. WALL

    네 경계에서 통과하지 않음

  5. TEST

    8 / 8 결과가 기록됨

04 / MINIMUM SPEC

구현 전에 인터페이스를 확인합니다

코드 모양은 조금 달라도 괜찮지만, 아래 입력·상태·출력과 생명주기는 같아야 합니다.

INPUTMove / Vector2

WASD와 방향키가 같은 값을 만듭니다.

STATEmoveInput

가장 최근의 방향 의도를 저장합니다.

PARAMETERmoveSpeed

Inspector에서 조절하는 초당 속도입니다.

OUTPUTlinearVelocity

Rigidbody2D에 전달할 실제 물리 속도입니다.

위치필수 책임통과 기준
Awake같은 GameObject의 Rigidbody2D 참조 저장Play 중 NullReferenceException이 없음
OnEnableMove Action 확인 및 활성화입력 계기판 값이 바뀜
OnDisableMove Action 비활성화생명주기가 대칭임
UpdateVector2 읽기, 크기 최대 1로 제한대각선 Speed가 직선과 같음
FixedUpdate입력 × 속도를 linearVelocity에 적용손을 놓으면 즉시 Speed 0

05 / VERIFICATION GATE

필수 테스트 8개로 완료를 증명합니다

한 번에 여러 값을 바꾸지 않습니다. 각 행의 조건을 만들고, 기대 결과와 실제 결과를 비교한 뒤 PASS 또는 FAIL을 기록합니다.

브라우저 저장 안내 테스트 판정과 관찰 기록은 이 브라우저에 자동 저장됩니다. 학번과 이름은 현재 탭에서만 유지되며, 공용 컴퓨터에서는 실습이 끝난 뒤 탭을 닫아 주세요.

Required tests0 / 8 PASS

테스트 표는 좌우로 이동해 조건, 판정과 관찰 기록을 모두 확인할 수 있습니다.

ID조작·조건기대 결과판정관찰·수정 기록
T01Play 후 아무 키도 누르지 않음Move (0, 0), Speed 0.00, 위치 고정
T02W를 2초간 누름위쪽으로 이동, Move (0, 1), Speed는 설정값
T03S, A, D를 각각 짧게 누름아래, 왼쪽, 오른쪽으로 정확히 대응
T04방향키 네 개를 각각 누름WASD와 같은 네 방향·같은 Speed
T05W+D를 동시에 누름오른쪽 위 이동, Speed가 직선 최대값과 같음
T06이동 중 모든 키를 놓음다음 물리 갱신에 Speed 0.00, 미끄러지지 않음
T07Wall 정면을 향해 3초간 계속 입력Player가 벽을 통과하지 않고 접촉면에서 멈춤
T08Wall 모서리로 대각선 입력벽 안으로 들어가거나 반대편으로 빠져나가지 않음
T09 선택게임패드 왼쪽 스틱을 절반 기울임기울인 방향으로 최대값보다 느리게 이동

판정과 관찰 기록은 자동 저장됩니다.

06 / DEBUG LADDER

FAIL은 가까운 단계부터 좁힙니다

전체 코드를 한꺼번에 바꾸지 않습니다. 화면에서 확인 가능한 신호를 왼쪽부터 따라가며 처음 끊긴 곳을 찾습니다.

KEY / STICKMOVE VALUEmoveInputlinearVelocityCOLLISION
1단계 힌트 · 입력값이 계속 (0, 0)

관찰: Input Actions 에셋을 열어 Move의 바인딩을 확인합니다. 비교: Action Type은 Value, Control Type은 Vector2인지 봅니다. 한 가지 수정: 에셋 저장 또는 Move Action 참조 연결 중 하나만 먼저 고칩니다.

2단계 힌트 · 값은 바뀌지만 속도가 0

관찰: PlayerController의 moveSpeed와 Rigidbody2D Body Type을 봅니다. 비교: FixedUpdate가 body.linearVelocity에 값을 쓰는지 확인합니다. 한 가지 수정: 처음 발견한 어긋남 하나만 고칩니다.

3단계 힌트 · 대각선만 더 빠름

관찰: W+D에서 Move와 Speed를 각각 기록합니다. 비교: ClampMagnitude의 결과를 다시 moveInput에 저장했는지 봅니다. 예상: moveSpeed가 5이면 직선과 대각선 모두 Speed 5입니다.

4단계 힌트 · 키를 놓아도 움직임

관찰: 키를 놓았을 때 Move가 (0, 0)으로 돌아오는지 봅니다. 값은 0인데 미끄러지면 다른 Script, Damping 또는 속도를 덮어쓰는 코드가 있는지 확인합니다.

5단계 힌트 · 벽을 통과함

관찰: Scene 뷰의 Gizmos로 두 Collider 경계를 봅니다. 비교: 양쪽 모두 2D Component인지, Wall의 Is Trigger가 꺼졌는지 확인합니다. 검색: Player Transform을 직접 바꾸는 다른 Script가 없는지 찾습니다.

6단계 힌트 · 코드가 컴파일되지 않음

Console의 가장 위에 있는 첫 빨간 오류 하나만 읽습니다. 파일명과 class명, 괄호의 짝, using UnityEngine.InputSystem;, 표시된 줄 바로 위를 순서대로 확인합니다.

AI 사용 범위 MCP와 Ask로 오류 문구와 기존 코드의 의미를 물을 수 있습니다. Generator는 이번 실습에서 사용하지 않습니다. 설명하지 못하는 코드는 제출물에 남기지 않습니다.

07 / EVIDENCE

다른 사람이 다시 확인할 수 있게 남깁니다

작동하는 순간만 보여 주지 않습니다. 구조, 설정, 결과를 함께 남겨 재현 가능한 증거를 만듭니다.

01 / SCRIPT

PlayerController.cs

입력 읽기와 물리 속도 적용의 책임이 분리된 최종 Script입니다.

02 / SCENE

Week04_InputPhysics

Player 한 개와 Wall 네 개 이상이 있으며 테스트를 다시 실행할 수 있습니다.

03 / SCREEN

week04_학번_이름.png

Game View의 입력 계기판과 충돌 코스, Console Error 0이 확인되는 화면입니다.

04 / TEST LOG

week04_학번_이름_test.csv

이 페이지에서 저장한 T01–T08 판정과 관찰·수정 기록입니다.

FINAL GATE

종료 전 8개 확인

0 / 8 완료

08 / EXIT TICKET

만든 결과를 세 문장으로 설명합니다

자신의 Scene을 가리키며 빈칸을 채웁니다. 코드 줄을 읽지 않고 말할 수 있으면 이번 목표를 이해한 것입니다.

01 / INPUT

WASD와 방향키는 서로 다른 ______이지만 같은 Move ______에 연결됩니다.

02 / TIME

Update에서 ______을 읽고, FixedUpdate에서 ______을 바꿉니다.

03 / COLLISION

벽을 통과하지 않는 결과는 Rigidbody2D와 두 ______의 경계를 Physics 2D가 계산하기 때문입니다.

09 / QUICK REFERENCES

실습 중 확인할 공식 자료

메뉴나 속성이 다르게 보일 때에는 현재 Editor 버전의 공식 문서를 먼저 확인합니다.