유니티 개요

1. 게임 엔진과 유니티(Unity) 이해하기

게임 엔진이란?

과거에는 그래픽 렌더링, 물리 연산, 사운드 처리를 개발자가 일일이 코딩해야 했습니다. 하지만 현대의 게임 엔진은 이러한 복잡한 기능을 미리 구현해 제공함으로써 개발자가 '콘텐츠' 제작에만 집중할 수 있게 돕습니다.

왜 유니티인가?

  • 멀티 플랫폼 빌드: 한 번의 개발로 iOS, 안드로이드, 윈도우, 리눅스는 물론 AR/VR까지 대응 가능합니다.
  • 낮은 진입장벽: 직관적인 GUI와 쉬운 학습 곡선, 그리고 낮은 라이선스 비용 덕분에 1인 개발자나 소규모 팀에게 유리합니다.
  • 방대한 생태계: 에셋 스토어를 통해 고퀄리티 리소스를 즉시 확보할 수 있고, 커뮤니티가 활성화되어 있어 문제 해결이 빠릅니다.

2. 유니티 엔진의 상세 장단점 비교

학습한 내용을 바탕으로 유니티의 특징을 표로 정리했습니다.

구분 장점 (이유) 단점 (이유)
학습 난이도 프로그래밍 몰라도 시작 가능 (드래그 앤 드롭, 시각적 배치)
기능이 많아 헷갈림 (초반 메뉴, 설정, 스크립트 방대함)
에디터 환경 직관적인 작업 가능 (씬 뷰에서 바로 배치 및 테스트)
프로젝트 커지면 느려짐 (리소스 증가 시 성능 하락)
멀티 플랫폼 여러 기기 배포 가능 (모바일, PC, 웹 등 원클릭 빌드)
최적화 필요 (기기별 성능, 해상도, 입력 방식 차이)
에셋 스토어 리소스 쉽게 확보 (모델, 음악, 코드 등 다운로드)
외부 의존성 문제 (업데이트 중단, 수정 어려움 발생 가능)
커뮤니티 자료와 정보가 많음 (전 세계 개발자 Q&A 풍부)
자료 품질 편차 (오래된 답변이나 부정확한 예시 혼재)
비용 무료로 시작 가능 (개인/소규모 팀 무료 라이선스)
매출 시 비용 발생 (일정 수익 이상 시 유료 전환)
테스트와 수정 빠른 실행 확인 (Play 버튼으로 즉시 테스트)
빌드 환경 차이 (모바일/웹 환경의 별도 디버깅 필요)

3. 게임 개발의 9가지 핵심 요소

게임은 단순히 코드만으로 이루어지지 않습니다. 유니티를 통해 제어하게 될 주요 요소들은 다음과 같습니다.

카테고리 주요 세부 요소
게임 핵심 시스템
게임 루프, 상태 관리, 물리 엔진, 캐릭터/오브젝트 로직
그래픽 & 비주얼
렌더링 파이프라인, 아트 에셋, 애니메이션 시스템, UI/UX
오디오
사운드 이펙트, 배경음악(BGM), 오디오 믹싱 및 엔진
인공지능 (AI)
NPC 행동 트리, 경로 탐색(Pathfinding), 적응형 시스템
입력 & 상호작용
입력 처리, 상호작용 시스템, 네트워크 입력 제어
네트워크 & 멀티
서버/클라이언트 구조, 매치메이킹, 동기화
데이터 & 리소스
데이터 저장(Serialization), 리소스 관리, 보안
툴 & 워크플로우
레벨 에디터, 자동화 툴, 스크립팅 시스템
최적화 & 품질 관리
퍼포먼스 프로파일링, 테스트 및 디버깅, 기기 대응

4. 유니티 에디터 인터페이스 (UI)

효율적인 작업을 위해 반드시 익혀야 할 5대 뷰입니다.

  1. Scene(씬) 뷰: 게임 세상을 시각적으로 구성하는 작업 공간입니다. (오브젝트 배치)
  2. Game(게임) 뷰: 실제 플레이어가 보게 될 화면입니다. (테스트 실행)
  3. Hierarchy(하이라키) 뷰: 현재 씬에 존재하는 모든 오브젝트의 명단과 계층 구조를 보여줍니다.
  4. Project(프로젝트) 뷰: 프로젝트에 사용되는 모든 소스(모델, 스크립트, 사운드 등)가 보관된 창고입니다.
  5. Inspector(인스펙터) 뷰: 선택한 오브젝트의 컴포넌트 정보와 세부 수치를 수정하는 설정창입니다.

 


5. 유니티 스크립트 라이프 사이클 (Life Cycle) 및 실행 순서

유니티 엔진은 매 프레임마다 정해진 내부 로직에 따라 함수들을 실행합니다. 이 흐름을 이해하면 데이터가 준비되지 않았는데 참조하려고 하는 'Null Reference' 에러를 효과적으로 방지할 수 있습니다.

🔄 전체 실행 순서 흐름도

유니티 내부의 실행 순서는 크게 초기화 → 물리 → 입력 → 게임 로직 → 렌더링 → 해제 순으로 진행됩니다.

 

 

  1. 초기화 (Initialization)
    • Awake(): 스크립트 인스턴스가 로딩될 때 가장 먼저 호출됩니다.
    • OnEnable(): 오브젝트가 활성화될 때마다 호출됩니다.
    • Start(): 첫 번째 프레임 업데이트 직전에 단 한 번 호출됩니다.
  2. 물리 연산 (Physics)
    • FixedUpdate(): 설정된 고정 시간 간격마다 호출됩니다. 물리 엔진(Rigidbody 등)과 관련된 계산을 처리하기에 가장 안전한 장소입니다.
  3. 입력 및 게임 로직 (Input & Game Logic)
    • Update(): 매 프레임마다 호출되며 입력 처리 및 일반적인 로직을 담당합니다.
    • LateUpdate(): 모든 Update()가 완료된 후 호출됩니다. 카메라 이동이나 캐릭터를 따라가는 로직을 주로 처리합니다.
  4. 렌더링 (Rendering)
    • OnRenderObject(): 모든 일반적인 카메라 렌더링이 끝난 후에 호출되어 별도의 그래픽 처리를 할 수 있게 합니다.
  5. 해제 및 종료 (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