01 Unity3D Engine 입문
1. Unity3D 기본 용어
- 프로젝트 : 하나의 게임, 콘텐츠, 어플리케이션을 뜻한다.
- 씬(Scence)
- 게임의 장면이나 상태를 저장하는 단위
- 하나의 거대한 게임을 씬 단위로 관리하며, 코드를 이용해 이동이 가능하다.
- Hierarchy View에 보이는 이름이 현재 씬의 이름이고, Hierarchy View에 배치된 게임 오브젝트들이 현재 씬에 존재하는 오브젝트들이다.
- 게임 오브젝트
- 씬에 배치되는 하나의 물체를 지칭하는 단위
- 게임 오브젝트에 원하는 컴포넌트를 추가하여 다양한 오브젝트 제작 가능
- 컴포넌트
- 게임 오브젝트에 부착할 수 있는 C# 스크립트 파일을 지칭하는 단위
- 게임 오브젝트에 컴포넌트를 부착하여 게임 오브젝트에 여러 기능을 부여
- Sprite Renderer 컴포넌트 : 2차원의 이미지를 화면에 출력
- Mesh Renderer 컴포넌트 : 3차원의 오브젝트(물체)를 화면에 출력
- Audio Source 컴포넌트 : AudioClip 변수에 등록된 사운드 에셋을 재생
게임 오브젝트를 선택하면 해당 게임 오브젝트가 가지고 있는 컴포넌트 목록이 Inspector View에 표시된다.
* 소리를 내는 AudioSource 컴포넌트를 부착하면 게임 오브젝트에서 소리가 재생되고, 화면에 2D 이미지를 보여주는 SpriteRenderer를 부착하면 우리가 원하는 이미지가 보인다.
- 에셋(Asset)
- 프로젝트 내부에서 사용하는 모든 리소스를 지칭하는 단위 (Project View)
- Audio, 3D Model, Animation, Texture, Script, Prefab, Etc..
- 프리팹 (Prefab)
- Hierarchy View에 있는 게임 오브젝트를 파일 형태로 저장하는 단위
- 주로 게임 중간에 생성되는 게임 오브젝트를 프리팹으로 저장해두고 사용한다
Project, Scene, GameObject, Component, Asset 관계도
Sprite Renderer 컴포넌트는 2D 이미지를 출력한다.
외부에서 가져온 이미지 에셋을 등록하면 위와 같이 출력된다.
2. Unity3D 좌표 체계
Unity3D의 게임 월드는 왼손 좌표계를 기준으로 x, y, z축을 나타낼 수 있다
실제 게임에서 x, y축을 사용하는 2차원과 x, y, z축을 사용하는 3차원으로 나눌 수가 있으며, 카메라를 사용하여 조절할 수 있다.
02 게임 오브젝트의 종류
1. 게임 오브젝트 메뉴
많이 사용되는 게임 오브젝트들을 생성할 수 있도록 메뉴화 하여 제공
Center On Children을 기준으로 위쪽이 게임 오브젝트를 생성하는 메뉴이고, 아래쪽이 게임 오브젝트를 제어하는 메뉴이다.
게임 오브젝트는 원하는 컴포넌트들을 부착해 개발자가 원하는 무언가를 만드는 것이기 때문에 기본적으로 제공되는 게임 오브젝트에 추가적으로 어떤 컴포넌트든 추가하거나 삭제하여 사용할 수 있다.
2. 빈 오브젝트 (Empty Object)
모든 오브젝트가 가지는 “Transform” 컴포넌트만 붙어있는 오브젝트
Create Empty를 선택하면 빈 오브젝트를 생성하고,
모든 게임 오브젝트는 Transform 컴포넌트를 가지게 된다.
Transform 컴포넌트는 이동/회전/크기를 제어하는 컴포넌트로 모든 게임 오브젝트가 기본으로 가지고 있다.
주로 게임에 보이지 않지만 게임의 여러 요소를 처리하는 오브젝트를 만들 때 Empty Object를 생성하고, 게임의 여러 요소를 처리하는 컴포넌트를 추가해서 사용한다.
ex. 적을 주기적으로 생성하는 적 Spawner, 스테이지가 클리어되는 조건을 관리하는 StageController
3. 3D Object
게임 화면에 배치할 수 있는 3D 오브젝트
- 3차원 도형 오브젝트 (육면체, 구체, 캡슐, 원통, 평면, 쿼드)
- Cube - 한 변의 길이가 1이고, 6개의 면으로 이루어진 육면체
- Mesh Filter 컴포넌트 : 3차원 오브젝트의 외형
- Mesh Renderer 컴포넌트 : 3차원 오브젝트의 표면 색상(재질)
- Box Collider 컴포넌트 : 게임 오브젝트의 충돌 범위를 설정
- Cube - 한 변의 길이가 1이고, 6개의 면으로 이루어진 육면체
- 화면에 3차원 텍스트를 표현
- 봉제인형처럼 흐느적거리게 만드는 오브젝트
- 3차원 지형 (지형, 지형에 배치되는 나무, 바람)
3차원 게임을 제작할 때 필요한 실제 사람이나 다양한 형태의 모델은 외부 프로그램에서 제작하여 가져와야 한다. (Unity3D는 기본적인 도형 오브젝트만 제공)
4. 2D Object
게임 화면에 배치할 수 있는 2D 오브젝트
나의 실행환경에서는 3D만 존재하여, 강의자료로 대체했다.
- Sprite - 게임 화면에 2D 이미지를 보이게 하는 게임 오브젝트
- Sprite Renderer 컴포넌트 : 게임 화면에 2D 이미지를 출력
- Sprite 변수에 적용된 에셋(이미지)을 화면에 출력
- Sprite Renderer 컴포넌트 : 게임 화면에 2D 이미지를 출력
5. Effect
게임에 사용되는 여러 효과, 무기의 잔상, 선 그리기와 같은 오브젝트들
- Particle - 게임에 사용되는 여러 효과
- Trail - 잔상 효과
- Line - 선
6. Audio
게임 내에서 재생되는 사운드와 관련된 오브젝트들
- Audio Source - 소리를 내는 게임 오브젝트
- Audio Reverb Zone - 동굴과 같은 실내의 울리는 잔향을 만들 때 사용
소리를 듣는 컴포넌트는 Audio Listener 컴포넌트로 Camera 오브젝트에 부착되어 있다.
7. Video
동영상을 재생하는 오브젝트
8. UI
사용자가 게임과 상호작용 할 수 있는 GUI 오브젝트들
버튼이나 스크롤바완 같은 UI를 사용할 수 있다.
03 Camera & Light
1. Camera
플레이어가 게임 월드를 볼 수 있는 눈 역할을 담당한다.
- Camera 컴포넌트 - 게임 월드를 보는 눈 역할을 담당
- Clear Flags
- 오브젝트가 존재하지 않는 빈 배경을 어떻게 채울지 결정하는 요소
- 주로 2D 게임은 Solid Color, 3D 게임은 Skybox를 사용
- 카메라를 동시에 여러 대 사용할 때 Depth only, Don’t Clear 옵션도 사용
- 특정 색상이나 그림으로 Clear 해주지 않기 때문에 오브젝트가 이동했을 때 기존 위치의 잔상이 남아있게 된다
- 오브젝트가 존재하지 않는 빈 배경을 어떻게 채울지 결정하는 요소
- Projection
- 카메라의 시점을 나타내며, 2D와 3D 시점이 존재한다
- Projection이 Orthographic 일 때 2D 모드
- Projection이 Perspective 일 때 3D 모드
- Clear Flags
- Audio Listener 컴포넌트 - “Audio Source” 컴포넌트가 내는 소리를 듣는 역할
카메라 오브젝트는 씬에 최소 1개 이상 존재해야 함
- 여러 개의 카메라를 이용해 CCTV와 같이 분할된 화면을 관찰하는 것도 가능
- 카메라에 이동 or 회전 애니메이션을 추가해 장면의 연출 효과를 주기도 함
2. Light
현실세계의 빛 역할을 담당한다
빛을 이용해 모델의 재질이나 색상을 다양한 형태로 보여주는데 사용된다
게임 월드에 빛 오브젝트가 없어도 완전 어둡지는 않다.
만약 완전한 암흑 공간을 만들고 싶다면, 메뉴에서 Window - Rendering - Lighting을 선택해
Lighting View를 열어서 환경광과 주변광을 어둡게 설정해야 한다.
Unity는 기본적으로 환경광과 반사광이 설정되어 있기 때문에 이 옵션을 설정해야 완전한 암흑 공간을 만들 수 있다
Light Component
Type 값으로 빛의 종류를 결정할 수 있다.
Type
- Directional Light
- 오브젝트의 위치, 크기가 중요하지 않고, 방향이 중요한 빛으로 게임 월드에 존재하는 모든 오브젝트에게 동일한 방향으로 빛을 제공한다
- Point Light
- Range 변수에 설정된 값 만큼 구 형태로 방사되는 빛
- 주변을 밝게 만드는 전구, 모닥불과 같은 곳에 사용한다
- Spot Light
- Range, Spot Angle 변수에 설정된 값 만큼 원뿔 형태로 뻗어나가는 빛
- 오브젝트를 강조해서 비출 때나 가로등과 같은 곳에서 사용한다
- Area Light
- 오브젝트의 위치를 기준으로 전방 방향으로만 방출되는 빛
- Area Light는 Baked 모드에서만 사용 가능하다
- 데이터를 구워놓고 사용하는 방식
Mode
빛의 연산을 실시간으로 할지 미리 계산해두고 쓸지 결정하는 옵션
- Realtime
- 빛이 비췄을 때의 밝기, 그림자 등의 연산을 실시간으로 함
- 장점 : 게임 실행 중에도 빛의 이동이나 회전에 따라 환경이 변화됨
- 단점 : 연산량이 많아 게임의 최적화에 큰 지장을 줌
- Mixed
- Realtime과 Baked를 섞어서 사용
- Baked
- 현재 상태로 빛 연산을 해두고 활용
- 장점 : 연산을 미리 해두고 사용하기 때문에 최적화가 잘 되어있음
- 단점 : 게임 실행 중에 빛이 이동/회전해도 반영되지 않음
- 빛이 Baked 모드일 때 설정해야 하는 것들
- Static 옵션을 Contribute GI로 설정해야 한다.
- Window - Rendering - Lighting에서 “Generate Lighting”으로 빛 데이터 Baked 하기
Generate Lighting을 클릭하게 되면
현재 작업중인 씬의 이름과 동일한 폴더가 생성되고, “Baked” 모드인 빛 들의 데이터가 저장된 파일이 생성된다
- Intensity
- 빛의 세기를 나타내는 수치로 높을 수록 빛의 세기가 세진다
- Shadow Type
- 빛을 받은 오브젝트의 그림자 설정
- Cookie & Cookie Size
- Cookie에 등록된 Texture 모양, Cookie Size 크기의 빛 생성
게임 오브젝트 Texture 출력
2D 이미지를 화면에 출력하는 방법
1. 사용할 이미지 에셋의 Texture Type을 Sprite(2D and UI)로 설정
2. GameObject - 2D Object - Sprite 생성
3. 생성된 오브젝트의 Sprite Renderer 컴포넌트에 있는 sprite 변수에 이미지 에셋 등록
3D 이미지를 화면에 출력하는 방법
1. 사용할 이미지 에셋의 Texture Type을 default로 설정
2. Project View에서 Meterial 에셋 생성
3. Meterial 에셋에 이미지 에셋 등록
4. GameObject - 3D Object - 원하는 오브젝트 생성
5. 생성된 오브젝트의 Mesh Renderer 컴포넌트에 있는 materials 변수에 Meterial 에셋 등록
'PBL > Unity' 카테고리의 다른 글
유니티 2D 기초 - 게임오브젝트 이동 (0) | 2024.04.08 |
---|---|
유니티 기초 - 유니티 이벤트 함수 (0) | 2024.04.08 |
유니티 기초 - 스크립트 개요, 콘솔 뷰에 데이터 출력 (0) | 2024.04.02 |
유니티 기초 - 유니티 에디터 인터페이스 (0) | 2024.04.01 |
유니티 기초 - 유니티 엔진 설치 (0) | 2024.04.01 |