- 수업 방식
- 교수자 설명과 코드 판독
- 핵심 질문
- 코드 한 줄은 무엇을 기억하고 판단하는가?
- 이전 학습
- GameObject · Component · Transform
- 핵심 개념
- field · type · method · condition
- 학생 활동
- 예측하고 자신의 말로 설명하기
- 다음 교시
- Unity가 코드를 실행하는 방식
교수자는 화면의 코드와 도해를 이용해 개념을 설명하고, 학생은 짧은 예측 질문에 답합니다. 실제 구현은 3교시의 독립 미션에서 진행합니다.
철자 전체를 외우는 것보다 각 요소의 책임을 구분하는 능력이 먼저입니다. 이 구분이 되면 새로운 코드를 만나도 구조부터 읽을 수 있습니다.
- 이전 학습 회수
GameObject와 Component의 관계를 질문으로 복원합니다.
- Script의 자리
Script Asset과 Component instance를 구분합니다.
- 값을 읽는 법
field, 이름, 자료형, 초기값의 역할을 해석합니다.
- 행동을 읽는 법
method, parameter, return을 입력과 결과로 연결합니다.
- 판단을 읽는 법
bool과 if가 실행 경로를 어떻게 나누는지 추적합니다.
- 회수 질문
핵심 개념을 보지 않고 한 문장씩 설명합니다.
Script는 GameObject의 행동 Component입니다
Unity에서 Script는 독립적으로 떠다니는 명령문이 아닙니다. GameObject에 붙어 그 오브젝트의 값과 행동을 담당하는 Component가 됩니다.
Project 창에 저장한 공통 행동 설계도
GameObject에 Script를 Component로 부착
각 GameObject가 자기 값을 가진 복사본을 보유
Play 중 Unity가 약속된 함수를 호출
설계도 하나, 인스턴스는 여러 개
MotionController.cs 하나를 세 GameObject에 붙이면 Script 파일은 하나지만 Component instance는 셋입니다. 공통 행동은 한 곳에서 관리하고, 각 오브젝트의 속도처럼 달라야 하는 값은 instance마다 따로 가질 수 있습니다.
같은 Script를 세 GameObject에 붙이면 생기는 것은?
가장 정확한 설명을 고릅니다.
변수는 값을 기억하는 이름표입니다
Component 안에 선언되어 오브젝트의 상태를 계속 기억하는 변수를 field라고 부릅니다. 한 줄을 “접근 범위 → 자료형 → 이름 → 초기값” 순서로 읽습니다.
[SerializeField] private float moveSpeed = 2.5f;
[SerializeField] private bool shouldRotate = true;
[SerializeField]private field를 Inspector에 저장하고 표시하라는 Unity의 표시입니다. 자세한 동작은 2교시에 설명합니다.private이 값을 이 class의 내부 구현으로 제한합니다. 다른 Script가 무분별하게 바꾸지 못하게 합니다.float / bool저장할 값의 종류입니다. 자료형은 가능한 연산과 Inspector의 입력 방식을 함께 정합니다.moveSpeed사람이 역할을 이해할 수 있도록 붙인 이름입니다. C# field는 보통 소문자로 시작하는 camelCase를 씁니다.= 2.5f / true처음 사용할 기본값입니다.;은 하나의 명령이 끝났음을 나타냅니다.
이번 주에 자주 만나는 네 가지 자료형
int정수
개수, 점수, 단계처럼 소수점이 필요 없는 값을 담습니다.
float실수
속도, 시간, 위치처럼 소수점이 필요한 값을 담습니다. 리터럴 뒤에 f를 붙입니다.
bool논리값
true와 false 중 하나를 담아 기능을 켜고 끄는 판단 재료가 됩니다.
Vector3세 축의 묶음
x, y, z 세 float를 한 값처럼 다룹니다. 2D Transform도 위치를 Vector3로 저장합니다.
자료형은 단순한 이름표가 아닙니다
bool에는 2.5를 넣을 수 없고, float에는 true를 넣을 수 없습니다. 자료형은 잘못된 값을 일찍 발견하게 해 주는 약속입니다.
함수는 이름 붙인 행동 묶음입니다
C#에서는 class 안의 함수를 method라고 부릅니다. method를 읽을 때는 “무엇을 받는가, 무엇을 하는가, 무엇을 돌려주는가”를 확인합니다.
private float CalculateDistance(float speed, float seconds)
{
float distance = speed * seconds;
return distance;
}
float반환 자료형
method가 일을 마친 뒤 float 결과 하나를 돌려준다는 뜻입니다. 결과가 없으면 void를 씁니다.
CalculateDistancemethod 이름
행동이 드러나는 동사 형태로 짓습니다. C# method 이름은 보통 대문자로 시작하는 PascalCase를 사용합니다.
(float speed, float seconds)parameter
호출하는 쪽에서 전달받을 입력의 종류와 이름입니다. 이 method는 두 개의 float가 필요합니다.
return distance;결과 반환
계산한 값을 호출한 위치로 돌려주고 method 실행을 끝냅니다.
CalculateDistance(2f, 3f) → 2 × 3 → 6
CalculateDistance(4f, 0.5f)의 결과는?
method 안의 계산을 손으로 추적합니다.
조건문은 실행할 길을 나눕니다
if는 괄호 안의 식을 먼저 평가합니다. 결과가 true일 때만 바로 뒤 중괄호 안의 코드를 실행합니다.
private void RotateWhenEnabled()
{
if (shouldRotate)
{
transform.Rotate(Vector3.forward, 90f);
}
}
shouldRotate의 현재 값을 읽습니다.
true인지 false인지 판단합니다.
true이면 중괄호 안으로 들어갑니다.
false이면 회전을 건너뛰고 다음 코드로 갑니다.
조건을 통과하므로 transform.Rotate(...)가 호출됩니다.
Script 전체가 멈추는 것이 아니라, 해당 중괄호 안의 코드만 실행하지 않습니다.
shouldRotate가 false라면 무엇이 일어날까요?
중괄호가 감싸는 범위를 기준으로 판단합니다.
class 전체를 세 층으로 읽습니다
긴 코드를 처음부터 끝까지 한 글자씩 읽으면 역할이 흐려집니다. 먼저 저장된 값, 행동 method, 판단 지점을 찾으면 전체 구조가 빠르게 보입니다.
using UnityEngine;
public class MotionController : MonoBehaviour
{
// 1. 기억하는 값
[SerializeField] private float moveSpeed = 2f;
[SerializeField] private bool shouldRotate = true;
// 2. 실행하는 행동
private void Move()
{
transform.Translate(Vector3.right * moveSpeed);
}
// 3. 행동을 고르는 판단
private void RotateWhenEnabled()
{
if (shouldRotate)
{
transform.Rotate(Vector3.forward, 90f);
}
}
}
값moveSpeed와shouldRotate가 각 Component instance의 현재 설정을 기억합니다.행동Move()와RotateWhenEnabled()가 해야 할 일을 이름 있는 단위로 나눕니다.판단if가 현재 bool 값을 읽고 회전 method 내부의 실행 경로를 나눕니다.아직 남은 질문이 method들은 누가, 언제, 얼마나 자주 호출할까요? 그 답이 2교시의 MonoBehaviour 생명주기입니다.
이 코드는 아직 완성된 움직임 코드가 아닙니다
시간 보정과 Unity의 호출 함수가 빠져 있습니다. 지금은 문법의 역할만 읽기 위한 설명용 예시입니다. 화면에서 안정적으로 움직이는 완성 구조는 2교시에서 교수자가 시연합니다.
보지 않고 네 문장으로 설명합니다
학생은 코드를 작성하지 않고, 아래 질문에 자신의 말로 답합니다. 교수자는 정확한 용어보다 개념의 관계가 맞는지 확인합니다.
ComponentScript Asset과 instance는 어떻게 다른가?
Asset은 공통 설계도이고, GameObject에 붙은 instance는 자기 값을 가진 실행 Component입니다.
Field자료형은 왜 필요한가?
field가 저장할 값의 종류와 가능한 연산을 제한해 잘못된 값을 일찍 발견하게 합니다.
Methodparameter와 return의 차이는?
parameter는 method가 받는 입력이고, return은 method가 돌려주는 결과입니다.
Conditionfalse라면 무엇을 건너뛰는가?
Script 전체가 아니라 해당 if의 중괄호 안에 있는 코드만 건너뜁니다.
설명의 근거가 되는 공식 문서
수업에서는 필요한 부분만 쉬운 언어로 풀어 설명합니다. 정확한 규칙을 다시 확인할 때 아래 원문을 사용합니다.
Creating scripts ↗
Script를 만들고 GameObject에 Component로 연결하는 기본 구조
MonoBehaviour ↗
MonoBehaviour Script가 GameObject의 Component로 동작하는 방식
Built-in types ↗
int, float, bool을 포함한 C# 기본 자료형의 분류
Selection statements ↗
if 문이 조건에 따라 실행 경로를 선택하는 규칙
질문이 남았다면
“모르겠어요”보다 “이 줄에서 float는 자료형이고 moveSpeed는 이름으로 이해했는데, private의 범위가 헷갈립니다”처럼 이미 이해한 부분과 막힌 지점을 함께 말합니다.