1. 게임 엔진과 유니티(Unity) 이해하기
게임 엔진이란?
과거에는 그래픽 렌더링, 물리 연산, 사운드 처리를 개발자가 일일이 코딩해야 했습니다. 하지만 현대의 게임 엔진은 이러한 복잡한 기능을 미리 구현해 제공함으로써 개발자가 '콘텐츠' 제작에만 집중할 수 있게 돕습니다.
왜 유니티인가?
- 멀티 플랫폼 빌드: 한 번의 개발로 iOS, 안드로이드, 윈도우, 리눅스는 물론 AR/VR까지 대응 가능합니다.
- 낮은 진입장벽: 직관적인 GUI와 쉬운 학습 곡선, 그리고 낮은 라이선스 비용 덕분에 1인 개발자나 소규모 팀에게 유리합니다.
- 방대한 생태계: 에셋 스토어를 통해 고퀄리티 리소스를 즉시 확보할 수 있고, 커뮤니티가 활성화되어 있어 문제 해결이 빠릅니다.
2. 유니티 엔진의 상세 장단점 비교
학습한 내용을 바탕으로 유니티의 특징을 표로 정리했습니다.
| 구분 | 장점 (이유) | 단점 (이유) |
| 학습 난이도 | 프로그래밍 몰라도 시작 가능 (드래그 앤 드롭, 시각적 배치) |
기능이 많아 헷갈림 (초반 메뉴, 설정, 스크립트 방대함)
|
| 에디터 환경 | 직관적인 작업 가능 (씬 뷰에서 바로 배치 및 테스트) |
프로젝트 커지면 느려짐 (리소스 증가 시 성능 하락)
|
| 멀티 플랫폼 | 여러 기기 배포 가능 (모바일, PC, 웹 등 원클릭 빌드) |
최적화 필요 (기기별 성능, 해상도, 입력 방식 차이)
|
| 에셋 스토어 | 리소스 쉽게 확보 (모델, 음악, 코드 등 다운로드) |
외부 의존성 문제 (업데이트 중단, 수정 어려움 발생 가능)
|
| 커뮤니티 | 자료와 정보가 많음 (전 세계 개발자 Q&A 풍부) |
자료 품질 편차 (오래된 답변이나 부정확한 예시 혼재)
|
| 비용 | 무료로 시작 가능 (개인/소규모 팀 무료 라이선스) |
매출 시 비용 발생 (일정 수익 이상 시 유료 전환)
|
| 테스트와 수정 | 빠른 실행 확인 (Play 버튼으로 즉시 테스트) |
빌드 환경 차이 (모바일/웹 환경의 별도 디버깅 필요)
|
3. 게임 개발의 9가지 핵심 요소
게임은 단순히 코드만으로 이루어지지 않습니다. 유니티를 통해 제어하게 될 주요 요소들은 다음과 같습니다.
| 카테고리 | 주요 세부 요소 |
| 게임 핵심 시스템 |
게임 루프, 상태 관리, 물리 엔진, 캐릭터/오브젝트 로직
|
| 그래픽 & 비주얼 |
렌더링 파이프라인, 아트 에셋, 애니메이션 시스템, UI/UX
|
| 오디오 |
사운드 이펙트, 배경음악(BGM), 오디오 믹싱 및 엔진
|
| 인공지능 (AI) |
NPC 행동 트리, 경로 탐색(Pathfinding), 적응형 시스템
|
| 입력 & 상호작용 |
입력 처리, 상호작용 시스템, 네트워크 입력 제어
|
| 네트워크 & 멀티 |
서버/클라이언트 구조, 매치메이킹, 동기화
|
| 데이터 & 리소스 |
데이터 저장(Serialization), 리소스 관리, 보안
|
| 툴 & 워크플로우 |
레벨 에디터, 자동화 툴, 스크립팅 시스템
|
| 최적화 & 품질 관리 |
퍼포먼스 프로파일링, 테스트 및 디버깅, 기기 대응
|
4. 유니티 에디터 인터페이스 (UI)
효율적인 작업을 위해 반드시 익혀야 할 5대 뷰입니다.
- Scene(씬) 뷰: 게임 세상을 시각적으로 구성하는 작업 공간입니다. (오브젝트 배치)
- Game(게임) 뷰: 실제 플레이어가 보게 될 화면입니다. (테스트 실행)
- Hierarchy(하이라키) 뷰: 현재 씬에 존재하는 모든 오브젝트의 명단과 계층 구조를 보여줍니다.
- Project(프로젝트) 뷰: 프로젝트에 사용되는 모든 소스(모델, 스크립트, 사운드 등)가 보관된 창고입니다.
- Inspector(인스펙터) 뷰: 선택한 오브젝트의 컴포넌트 정보와 세부 수치를 수정하는 설정창입니다.

5. 유니티 스크립트 라이프 사이클 (Life Cycle) 및 실행 순서
유니티 엔진은 매 프레임마다 정해진 내부 로직에 따라 함수들을 실행합니다. 이 흐름을 이해하면 데이터가 준비되지 않았는데 참조하려고 하는 'Null Reference' 에러를 효과적으로 방지할 수 있습니다.
🔄 전체 실행 순서 흐름도
유니티 내부의 실행 순서는 크게 초기화 → 물리 → 입력 → 게임 로직 → 렌더링 → 해제 순으로 진행됩니다.
- 초기화 (Initialization)
- Awake(): 스크립트 인스턴스가 로딩될 때 가장 먼저 호출됩니다.
- OnEnable(): 오브젝트가 활성화될 때마다 호출됩니다.
- Start(): 첫 번째 프레임 업데이트 직전에 단 한 번 호출됩니다.
- 물리 연산 (Physics)
- FixedUpdate(): 설정된 고정 시간 간격마다 호출됩니다. 물리 엔진(Rigidbody 등)과 관련된 계산을 처리하기에 가장 안전한 장소입니다.
- 입력 및 게임 로직 (Input & Game Logic)
- Update(): 매 프레임마다 호출되며 입력 처리 및 일반적인 로직을 담당합니다.
- LateUpdate(): 모든 Update()가 완료된 후 호출됩니다. 카메라 이동이나 캐릭터를 따라가는 로직을 주로 처리합니다.
- 렌더링 (Rendering)
- OnRenderObject(): 모든 일반적인 카메라 렌더링이 끝난 후에 호출되어 별도의 그래픽 처리를 할 수 있게 합니다.
- 해제 및 종료 (Cleanup)
- OnDisable(): 오브젝트나 스크립트가 비활성화될 때 호출됩니다.
- OnDestroy(): 오브젝트가 파괴될 때 호출되어 자원을 정리합니다.
💡 한눈에 보는 실행 순서 요약표
| 단계 | 함수명 | 주요 특징 및 용도 |
| 최초 실행 | Awake() |
변수 및 상태 초기화 (비활성 상태에서도 실행)
|
| 활성화 | OnEnable() |
이벤트 구독 및 오브젝트 재사용 시 초기화
|
| 시작 | Start() |
다른 오브젝트와의 상호작용 준비 완료 시점
|
| 고정 루프 | FixedUpdate() |
물리 연산 전용 (프레임 독립적 실행)
|
| 기본 루프 | Update() |
키보드/마우스 입력 및 일반 게임 로직
|
| 후행 루프 | LateUpdate() |
캐릭터 이동 후 카메라 추적 등 최종 조정
|
| 비활성화 | OnDisable() |
이벤트 구독 해제 및 기능 일시 정지
|
| 제거 | OnDestroy() |
메모리 해제 및 최종 정리
|
'유니티 > UnityEngine3D 입문 및 스크립팅 기초' 카테고리의 다른 글
| 코루틴 (0) | 2026.01.02 |
|---|---|
| 물리, 충돌 (0) | 2026.01.02 |
| Transform 및 위치 이동 (0) | 2026.01.01 |
| 오브젝트, 프리팹, 생성과 파괴 (0) | 2026.01.01 |