유니티 알아보기

박지성 ·2025년 9월 8일
post-thumbnail

들어가면서

이번에 공모전 개발을 진행하면서 유니티를 하게 되었다.
유니티는 안해봐서 사전 공부가 필요해 보인다.
따라서 유니티를 알아보고자 한다.

유니티로 프로젝트를 하기전에 블랙박스 문제를 해결해 보고자 한다.

참고

항상 새로운 내용을 공부할 때 꼭 하는 습관이 있다.
나무위키를 읽는 것 나무위키-유니티


유니티

유니티는 게임을 포함한 다양한 3D 및 2D 인터랙티브 콘텐츠를 제작할 수 있는 통합 개발 환경(Integrated Development Environment, IDE)이자 게임 엔진

흠.. IDE...? 통합 개발 환경...? IDE = IntelliJ 같은거..?
조금 깊게 고민해봐야겠다.

통합 개발 환경, IDE

IDE(Integrated Development Environment)는 이름 그대로 개발에 필요한 여러 도구를 하나의 환경으로 '통합'해 놓은 소프트웨어

대표적으로는 IntelliJ, Android Studio 가 있다.

일반적인 IDE 특징은 아래를 포함한다.

  • 소스 코드 에디터: 코드를 작성하는 공간 (자동 완성, 문법 강조 등)
  • 디버거: 코드의 버그를 찾고 수정하는 도구 (코드 실행을 멈추고 변수 확인 등)
  • 컴파일러/인터프리터: 개발자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 도구
  • 빌드 자동화 도구: 코드를 최종 실행 파일로 만들고 배포하는 과정을 자동화하는 기능

우리가 웹 개발을 할 때 생각해보자.

에디터는 VS code를 사용하고, 프레임워크는 Nest.js, 포함이 되어있지만 런타임은 Node.js
이렇게 필요한 환경과 언어등을 조합해서 사용한다

하지만 IDE는 모든게 묶여 있는 소프트웨어라고 볼 수 있다.

유니티 IDE의 특징

  • 유니티 에디터 (Unity Editor): 이것이 바로 유니티의 IDE입니다. 여기에는 다음과 같은 기능이 모두 포함되어 있습니다.
  • 비주얼 에디터: 코딩 없이 3D/2D 씬을 직접 디자인하고 객체를 배치하는 강력한 기능
  • 코드 관리: C# 스크립트를 생성하고 관리하며, VS Code 같은 외부 에디터와 매끄럽게 연동
  • 통합된 런타임: 에디터 안에 'Play' 버튼이 있습니다. 이 버튼을 누르면, 별도의 프로그램을 켤 필요 없이 에디터 내부에서 즉시 게임이 실행됩니다. 이는 유니티 에디터가 테스트용 런타임 환경(Unity Player)을 내장하고 있기 때문입니다.
  • 디버거: 에디터에서 실행 중인 게임의 코드를 실시간으로 분석하고 디버깅할 수 있습니다.
  • 빌드 시스템: 'Build Settings' 메뉴를 통해 클릭 몇 번으로 PC, 모바일, 웹 등 원하는 플랫폼의 실행 파일을 간단하게 만들어 낼 수 있습니다.

다만 유니티는 다른 IDE와 차이점이 있다.

우리가 Java로 개발을 할 때 꼭 IntelliJ를 안쓰고 Vs code를 쓰거나 다른 IDE를 사용해 개발을 할 수 있다. 즉 IDE는 편리한 환경을 제공하는 것이지 강제되는 것은 아니다.

하지만 유니티는 무조건 유니티 IDE에서 진행 해야한다.

유니티는 하나의 시스템? 플랫폼?으로 볼 수 있을 것 같다.
개발 환경, 시스템, 런타임이 IDE에 묶여 시스템을 구성한다

유니티는 프레임워크나 런타임만 따로 제공하는 것이 아니라 IDE에 전부 통합하여 제공한다라는 느낌으로 이해했다.

따라서 어쩔 수 없이 유니티 IDE는 강제된다. (C# 코드 부분 빼고)

정리하면!!!

IntelliJ와 같은 IDE는 '코드 중심(Code-centric)'으로 설계되었음!!
프로젝트의 핵심은 .java 같은 소스 코드 파일들이고, IDE는 이 코드들을 효율적으로 작성하고 관리, 빌드하는 데 집중한다!!!
소스 코드만 있다면 다른 IDE로 옮겨도 프로젝트를 이어나갈 수 있다!!

반면

유니티 에디터는 '콘텐츠 중심(Content-centric)'으로 설계되었음!!
유니티 프로젝트의 핵심은 C# 코드뿐만 아니라, 씬(.unity), 프리팹(.prefab), 머티리얼(.mat), 애니메이션(.anim) 등 수많은 에셋들과 시각적, 공간적 관계 그 자체라고 볼 수 있다!!

한마디로 게임엔진.


유니티 작동 원리, 시스템

우선 사용하는 기술을 보면
아래의 기술을 사용한다고 나무위키에 나와있다.

  • 스크립트 : C#
  • 런타임 : C, C++
  • 그래픽 API : DirectX, Metal, Vulkan, OpenGL

이 부분을 자세하게 이해보자.

전체구조는 다음과 같이 계층 구조를 이루고 있다.

만약 우리가 "회전한다"라는 코드를 작성했다고 하자.

  1. (C# 스크립트): Update() 함수 안에서 transform.Rotate(0, 1, 0); 코드가 실행되고. "이 오브젝트를 Y축으로 1도 회전시켜줘" 라는 '지시'가 수행된다.
  2. (C/C++ 런타임): 지시를 받아, 해당 오브젝트의 실제 회전 값을 계산하고, 3D 공간의 모든 물체를 종합하여 카메라에 어떻게 보일지 최종 화면을 '구성'한다.
  3. (그래픽스 API): 런타임은 구성된 화면 정보를 바탕으로 "삼각형 수천 개를 이러이러한 좌표에 그려라" 와 같은 구체적인 그리기 명령(Draw Call)을 생성하여 '번역/전달'한다.
  4. (GPU): 그래픽스 API를 통해 전달받은 명령을 빠른 속도로 병렬 처리하여 모니터에 최종 픽셀을 '출력'한다.

아하!
너무 복잡하다!!

하지만!! 추상화를 통해 아주 편하게 사용할 수 있도록 유니티를 만들었기 때문에 우리는 맨 위 스크립트 계층만 보면 된다!!!

아래 계층의 작업은 알아서 수행된다!!!

실제로는

C# 코드 → (컴파일) → CIL (중간 언어)
게임 실행 → Mono VM (JIT 컴파일러)가 CIL
(빌드 시) IL2CPP가 CIL을 C++ 코드로 변환

요런 복잡한 과정을 거쳐서 실행 된다고 한다!!!


유니티 핵심 구성 요소

복잡한 원리는 알아서 잘 된다고 생각하고.
우리가 개발을 진행하는 스크립트 계층을 이해하기 위해서 유니티의 핵심 구성 요소를 알아 보았다.

1. 게임 오브젝트 (Game Object)
씬(Scene) 안에 존재하는 모든 '물체'. 화면에 보이는 캐릭터, 배경, 아이템, 눈에 보이지 않는 카메라, 조명, 게임 관리자 등도 모두 게임 오브젝트이다. 씬을 구성하는 가장 기본 단위라고 할 수 있다.

2. 컴포넌트 (Component)
게임 오브젝트에 붙여서 특정 기능이나 속성을 부여하는 '부품'이다. 게임 오브젝트 자체는 빈 껍데기일 뿐, 컴포넌트를 붙여야 비로소 의미를 갖게 된다.

Transform: 모든 게임 오브젝트가 반드시 갖는 기본 컴포넌트로, 위치(Position), 회전(Rotation), 크기(Scale) 정보를 담는다.
Rigidbody: 물리 법칙(중력, 힘, 충돌)을 적용받게 한다.
Collider: 다른 물체와 충돌을 감지할 수 있는 물리적 형태를 부여한다.
Script: 개발자가 C#으로 작성한 코드로, '스페이스바를 누르면 점프'와 같은 고유한 행동을 정의한다.

약간 클래스와 메서드 관계 아닐까??

3. 씬 (Scene)
게임의 특정 장면이나 레벨을 담는 '작업 공간'
'메인 메뉴 씬', '1단계 씬' 등으로 나누어 관리한다 (페이지?)

4. 에셋 (Asset)
개발에 사용하는 모든 '재료'
3D 모델, 이미지, 사운드 파일, C# 스크립트 코드, 폰트 등이 모두 에셋에 해당.

5. 프리팹 (Prefab)
자주 사용되는 게임 오브젝트를 모든 컴포넌트 설정과 함께 저장해 둔 '템플릿'
복붙용인듯


기타 : Hierarchy
씬(Scene)에 있는 모든 게임 오브젝트의 목록과 구조를 보여주는 창

이상 끝!

실제로 해보면서 공부해야할 듯!

profile
개발 블로그 맞음.

0개의 댓글