Unity 3D Engine 입문
(1) Unity 3D 기본 용어
✅ 프로젝트 (Project)
: 하나의 게임, 콘텐츠, 어플리케이션을 뜻함
▶ 유니티 에디터를 틀었을 때, 그 안에 있는 모든 것을 프로젝트라고 함
✅ 씬 (Scene)
- 게임의 장면이나 상태를 저장하는 단위
- 하나의 거대한 게임을 씬 단위로 관리하며, 코드를 이용해 이동이 가능하다
- 코드를 이용하여 다른 씬으로 바꿀 수 있으며, 씬이 바뀌게 되면 이전 씬에 존재했던 모든 정보들을 삭제하고, 다음 씬으로 넘어가는 기능 제공
✅ 게임 오브젝트 (GameObject)
- 씬에 배치되는 하나의 물체를 지칭하는 단위
- 모든 게임 오브젝트는 위치/회전/크기를 제어하는 "Transform" 컨포넌트를 가지고 있다.
- 게임 오브젝트는 컴포넌트를 묶어서 관리하고, 접근할 수 있는 수단
- 게임 오브젝트에 원하는 컴포넌트를 추가하여 다양한 오브젝트 제작 가능
- Ex) 적 오브젝트, 나무 오브젝트, 공격 효과음 오브젝트, 불 이펙트 오브젝트 등
✅ 컴포넌트 (Component) [C# Script]
- 게임 오브젝트에 부착할 수 있는 C# 스크립트 파일을 지칭하는 단위
- 게임 오브젝트에 컴포넌트를 부착하여 게임 오브젝트에 여러 기능을 부여
- Sprite Renderer 컴포넌트 : 2차원의 이미지를 화면에 출력
- Mesh Renderer 컴포넌트 : 3차원의 오브젝트(물체)를 화면에 출력
- Audio Source 컴포넌트 : AudioClip 변수에 등록된 사운드 에셋을 재생
✅ 에셋 (Asset)
- 프로젝트 내부에서 사용하는 모든 리소스를 지칭하는 단위 (Project View)
- Audio, 3D Model, Animation, Texture, Script, Prefab, Etc...
✅ 프리팹 (Prefab)
- Hierarchy View에 있는 게임 오브젝트를 파일 형태로 저장하는 단위
- 주로 게임 중간에 생성되는 게임 오브젝트를 프리팹으로 저장해두고 사용한다
- 프리팹의 장점
- 동일한 게임 오브젝트를 여러 Scene이나 게임 월드 특정 장소에 배치할 때 Project View에 저장되어 있는 프리팹을 Drag & Drop하여 배치 가능
- 기획상의 변경이 있을 때 프리팹 원본을 갱신하게 되면 모든 씬에 복사되어 배치된 게임 오브젝트들도 원본과 동일하게 업데이트 됨
✅ Project, Scene, GameObject, Component, Asset 관계도
▶ Sprite Renderer 컴포넌트 : 우리가 원하는 2D 이미지를 화면에 보여주는 컴포넌트
(2) Unity 3D 좌표체계
Unity 3D의 게임 월드는 왼손 좌표계를 기준으로 x, y, z 축을 나타낼 수 있다.
▶ 실제 게임에서는 x, y 축을 사용하는 2차원과 x, y, z축을 사용하는 3차원으로 나눌 수 있으며 이 차원은 카메라를 사용하여 조절할 수 있다.
게임 오브젝트의 종류
1. 게임 오브젝트 메뉴
: 많이 사용되는 게임 오브젝트들을 생성할 수 있도록 메뉴화하여 제공
2. 빈 오브젝트 (Empty Object)
: 모든 오브젝트가 가지는 "Transform" 컴포넌트만 붙어있는 오브젝트
3. 3D Object
: 기본적인 도형을 표현하거나 텍스트와 같이 3차원의 텍스트를 나타내는 등 게임 화면에 배치할 수 있는 3D 오브젝트
✅ Cube
- 한 변의 길이가 1이고, 6개의 면으로 이루어진 육면체
- 텍스처를 적용하면 모든 면 안에 동일한 이미지가 표현된다
[ Cube 관련 컴포넌트 ]
- Mesh Filter 컴포넌트 : 3차원 오브젝트의 외형으로, Mesh 변수에 등록된 데이터에 따라 외형이 다르게 구성된다
- Mesh Renderer 컴포넌트 : 3차원 오브젝트의 표면 생상으로 Material과 Light 정보를 바탕으로 표면의 질감이 표현된다
- Box Collider 컴포넌트 : 게임 오브젝트의 충돌 범위를 설정한다
4. 2D Object
: 게임 화면에 배치할 수 있는 2D 오브젝트
✅ Sprite
: 게임 화면에 2D 이미지를 보이게 하는 게임 오브젝트
▶ Sprite Renderer 컴포넌트 : 게임 화면에 2D 이미지를 출력 → sprite 변수에 적용된 에셋(이미지)를 화면에 출력
5. Effect
: 게임에 사용되는 여러 효과, 무기의 잔상, 선 그리기와 같은 오브젝트들
6. Audio
: 게임 내에서 재생되는 사운드와 관련된 오브젝트들
7. Video
: 동영상을 재생하는 오브젝트
8. UI
: 사용자가 게임과 상호작용할 수 있는 GUI 오브젝트들
Camera & Light
1. Camera
: 플레이어가 게임 월드를 볼 수 있는 눈 역할을 담당한다.
[ 카메라 오브젝트의 특징 ]
▶ 카메라 오브젝트는 씬에 최소 한개 이상 존재해야 함
- 여러 개의 카메라를 이용해 CCTV와 같이 분할된 화면을 관찰하는 것도 가능
- 카메라 이동 or 회전 애니메이션을 추가해 장면의 연출 효과를 주기도 함
✅ Camera 컴포넌트 : 게임 월드를 보는 눈 역할 담당
- Clear Flags : 오브젝트가 존재하지 않는 빈 배경을 어떻게 채울지 결정하는 요소
- 주로 2D 게임은 Solid Color, 3D 게임은 Skybox를 사용
- 카메라를 동시에 여러 대 사용할 때 Depth only, Don't Clear 옵션도 사용
- Background : Clear Flags가 'Solid Color'일 때 배경화면의 색상을 나타내는 변수
- Projection : 카메라의 시점을 나타내며, 2D와 3D 시점이 존재한다
- Projection이 Orthographic 일 때 2D 모드
- Projection이 Perspective 일 때 3D 모드
- Clipping Planes : 카메라가 오브젝트를 볼 수 있는 시야 거리
- Viewport Rect : 카메라가 본 것을 화면에 출력하는 영역 설정 (min 0, max 1)
✅ Audio Listener 컴포넌트 : 'Audio Source' 컴포넌트가 내는 소리를 듣는 역할
2. Light
: 현실 세계의 빛 역할을 담당
▶ 빛을 이용해 모델의 재질이나 색상을 다양한 형태로 보여주는데 사용된다
💡 완전한 암흑 공간을 만들고 싶을 경우
- 메뉴에서 Window - Rendering - Lighting Settings를 선택해 Lighting View를 열어서 환경광과 주변광을 어둡게 설정 가능
- 카메라의 Clear Flags를 어두운 검은 화면으로 설정
▶ 유니티는 기본적으로 환경광과 반사광이 설정되어 있기 때문이 이 옵션을 설정해야 완전한 암흑 공간을 만들 수 있음
✅ Light Component
[ Type ]
- Directional Light
- 오브젝트의 위치, 크기가 중요하지 않고, 방향이 중요한 빛으로 게임 월드에 존재하는 모든 오브젝트에게 동일한 방향으로 빛을 제공한다
- Point Light
- Range 변수에 설정된 값 만큼 구 형태로 방사되는 빛
- 주변을 밝게 만드는 전구, 모닥불과 같은 곳에 사용한다.
- Spot Light
- Range, Spot Angle 변수에 설정된 값 만큼 원뿔 형태로 뻗어나가는 빛
- 오브젝트를 강조해서 비출 때나 가로등과 같은 곳에서 사용됨
- Area Light
- 오브젝트의 위치를 기준으로 전방 방향으로만 방출되는 빛
- Area Light는 Baked 모드에서만 사용 가능
[ Mode ]
: 빛의 연산을 실시간으로 할지 미리 계산해두고 쓸지 결정하는 옵션
- Realtime
- 빛이 비췄을 때의 밝기, 그림자 등의 연산을 실시간으로 함
- 장점 : 게임 실행 중에도 빛의 이동이나 회전에 따라 환경이 변화됨
- 단점 : 연산량이 많아 게임의 최적화에 큰 지장을 줌
- Mixed
- Realtime과 Baked를 섞어서 사용
- Baked
- 현재 상태로 빛 연산을 해두고 활용
- 장점 : 연산을 미리 해두고 사용하기 때문에 최적화가 잘 되어있음
- 단점 : 게임 실행 중에 빛이 이동/회전해도 반영되지 않음
- Intensity
- 빛의 세기를 나타내는 수치로 높을수록 빛의 세기가 세진다
- Shadow Type
- 빛을 받은 오브젝트의 그림자 선정
- Cookie & Cookie Size
- Cookie에 등록된 Texture 모양, Cookie Size 크기의 빛 생성
게임 오브젝트 Texture 출력
1. 2D 이미지를 화면에 출력하는 방법
1) 사용할 이미지 에셋의 Texture Type을 Sprite (2D and UI)로 설정
2) GameObject - 2D Object - Sprite 생성
3) 생성된 오브젝트의 Sprite Renderer 컴포넌트에 있는 sprite 변수에 이미지 에셋 등록
2. 3D 오브젝트에 이미지를 출력하는 방법
1) 사용할 이미지 에셋의 Texture Type을 default로 설정
2) Project View에서 Material 에셋 설정
3) Material 에셋에 이미지 에셋 등록
4) GameObject - 3D Object - 원하는 오브젝트 생성
5) 생성된 오브젝트의 Mesh Renderer 컴포넌트에 있는 materials 변수에 Material 에셋 등록
출처 : 따라하면서 배우는 고박사의 유니티 기초(https://inf.run/sgcy)
'Study > Unity' 카테고리의 다른 글
[Unity 2D Basic] 게임 오브젝트 이동 (0) | 2024.04.10 |
---|---|
[Unity Introduction] 유니티 이벤트 함수 (0) | 2024.04.09 |
[Unity Introduction] 스크립트 개요, 콘솔 뷰에 데이터 출력 (0) | 2024.04.03 |
[Unity Introduction] 유니터 에디터 인터페이스 (1) | 2024.04.03 |
[Unity Introduction] 유니티 엔진 설치 (0) | 2024.04.03 |