01 Draw Call & Batches
- Draw Call
- CPU가 GPU에게 어떤 그림을 그려 달라고 요청하는 것
- Draw Call 값이 적을수록 게임이 가벼우며, 기기에 따라 특정 개수를 넘기면 프레임 저하 현상을 일으킬 수 있다
- 모바일의 경우 100을 넘기지 않는 것을 권장한다
- Batches
- Draw Call을 포함하는 상위 개념으로 Unity 5.0부터 Draw Call 대신 Batches를 기준으로 “Stats”에 렌더링 정보를 표현한다
- Batches는 Mesh, Material, Shader, Draw Call 등의 정보를 종합적으로 계산한다
Batche가 낮을수록 좋다.
- Sprite Atlas
- 여러 장의 Sprite 이미지를 한 장의 텍스처에 모아 두고 사용하는 것으로 Unity는 Sprite Packer(Legacy)와 Sprite Atlas를 제공한다
- Sprite Atlas를 사용해야 하는 이유?
- 2D 게임에서 배경이나 캐릭터, 적 등을 표현하는데 사용되는 Sprite는 매번 렌더링 할 때마다 각 Sprite 별로 1의 Batches가 증가한다.
- 예를 들어 게임에 사용되는 캐릭터, 적, 아이템 등 모두 다른 Sprite를 사용하는 오브젝트가 100개 있고, 동시에 게임에 등장한다면 Batches는 100이다
- 하지만 동일한 Sprite를 사용하는 오브젝트가 100개 일 경우에는 Batches가 1이다
- Sprite Atlas를 사용해 서로 다른 Sprite를 하나의 텍스처에 모아 두고 사용하면 서로 다른 Sprite의 오브젝트를 100개 만든다고 해도 Batches가 1일 것이다
처음 scene을 생성했을 때는 메인 카메라만 있고 그림을 표현하는 오브젝트가 없기 때문에 Batches의 값이 0인 것을 확인할 수 있다.
외부에서 사용할 이미지를 가져오고 오브젝트를 생성한다.
이미지를 등록해서 화면에 나타내면 Batches의 값이 1이 된 것을 확인할 수 있다.
기존의 오브젝트를 복사해서 이미지를 변경해본다. Batches의 값이 2가 된 것을 확인할 수 있다.
하트 이미지인 오브젝트를 복제해서 화면에 여러 개 생성해보면 2개의 Sprite 정보만 사용하고 있기 때문에 Batches의 값이 2로 유지되는 것을 확인할 수 있다.
오브젝트의 개수가 아무리 많이 늘어나도 사용되고 있는 이미지 파일이 2개이기 때문에 Batches의 값은 유지된다.
Project View에 있는 모든 이미지들을 화면 상에 나타나도록 한다.
원래는 오브젝트를 생성한 후에 이미지를 등록해야 하지만 2D의 경우 드래그하면 오브젝트가 생성되는 것을 볼 수 있다.
그리고 현재 화면 상에 14개의 이미지를 사용하고 있기 때문에 Batches의 값이 14인 것을 확인할 수 있다.
02 Sprite Atlas
Batches 수치를 Sprite Atlas를 사용하여 조절한다.
Project View '+' 버튼 - 2D - Sprite Atlas으로 생성하고 이미지를 등록한다.
Batches의 값이 Atlas 기준으로 바뀌는 것을 확인할 수 있다.
주의할 점
- 우리 게임에 있는 모든 이미지 에셋을 하나의 Sprite Atlas로 묶으면 이미지를 많이 사용해도 Batches 값이 1이다.
- Sprite Atlas 단위로 묶여 있을 때 Atlas 내부의 이미지 하나만 사용해도 해당 Sprite Atlas 내부의 모든 이미지 정보를 불러오게 된다.
- 게임의 규모가 클수록 하나의 Atlas에 모든 이미지 정보를 넣는 행위는 무모한 짓이다.
- 한 화면에 함께 사용되는 것 또는 하나의 오브젝트에 사용되는 것과 같이 관련이 있는 이미지들을 하나의 Sprite Atlas로 묶어주는 것이 좋다.
03 Texture Asset
게임 내에서 보여지는 이미지 또는 text asset은 Inspector View에 다양한 정보가 출력된다.
Texture Type
- 텍스처를 어떤 용도로 사용할지에 따라 설정하는 것
- Sprite (2D and UI) : 2D Sprite 오브젝트나 UI에 텍스처를 적용할 때 설정
- default : 일반적인 3D 오브젝트의 material에 적용할 때 설정
Sprite Mode
- Single : 단일 이미지 전체를 사용
- Multiple : 개발자가 원하는 형태로 이미지를 분할해서 사용 (원본도 사용 가능)
- Polygon : 우리가 외부에서 가져온 이미지에 설정하지 않음
Sprite Editor
- Sprite를 편집할 수 있는 View
- Sprite Mode에 따라 옵션이 달라진다.
- Sprite의 위치, 크기, 경계, 중심점 편집 가능
- Sprite를 분할하거나 폴리곤 점 개수를 수정하는 등의 편집 가능
Sprite Mode가 Multiple일 때 이미지를 분할할 수 있다.
불규칙한 크기로 분할할 때는 빈 곳을 드래그해서 새로운 분할 영역을 생성하고 일정한 규칙을 가지고 분할할 때는 Slice 메뉴를 이용한다.
하나의 이미지 에셋에 여러 장의 그림을 그리고 분할하여 사용하는 이유
- 게임에서 사용되는 모든 이미지의 메모리가 POT 단위로 설정되기 때문이다.
- 게임에서 사용되는 텍스처를 제작할 때는 POT 규격으로 제작해야 한다.
- POT 규격이 아닌 텍스처는 POT 규격으로 변환하기 위해 내부적인 처리를 거치게 되고 이로 인한 메모리 비용이 증가한다.
게임 내 사용되는 이미지를 POT 단위로 만드는 것이 불가능하기 때문에 위 그림과 같이 한 캐릭터의 다양한 동작 애니메이션을 하나의 이미지에 저장하는 것을 권장하고 있다.
04 Polygon Sprites
기본적인 도형 이미지는 외부에서 가져오지 않아도 유니티 내부에서 제작할 수 있다.
Project View - 2D - Sprites
Square를 생성하고 Sprite Mode를 Polygon으로 설정한다.
Sprite editor에서 sides 변수를 설정할 수 있는데 이 변수에 따라 도형의 모양이 바뀌게 된다.
Sides : 도형의 꼭짓점 개수 (3~128개까지 설정 가능)
Sides를 128로 설정하면 원이 생성되는 것을 알 수 있다.
다양한 도형을 외부에서 가져오지 않고 유니티 내부에서 직접 제작하여 사용할 수 있다.
05 Sprite Animation
동작에 맞춰 이미지가 계속 변화하도록 한다.
2D 게임에서 오브젝트가 애니메이션을 재생하려면 Animator Component, Animator Controller Asset, Animation Asset이 필요하다.
Animation Asset
- 하나의 애니메이션 동작을 저장하는 파일 (“걷기”, “뛰기“, “공격” 등)
- 파일 생성 : Project View - “+” - Animation
Animator Controller Asset
- 하나의 오브젝트가 가질 수 있는 애니메이션을 묶어서 관리하는 파일
- 파일 생성 : Project View - “+” - Animator Controller
Animator Component
- 애니메이션 재생에 필요한 오브젝트에 애니메이션 컴포넌트를 추가하고 Controller 변수에 Animator Controller Asset을 등록해서 사용하게 된다.
- 게임 오브젝트의 애니메이션 재생, 교체 등을 제어하는 역할을 수행한다
“Animator” View
- Animator Controller Asset에 애니메이션을 등록하는 View
'PBL > Unity' 카테고리의 다른 글
유니티 2D 기초 - 2D Tilemap Editor (0) | 2024.05.07 |
---|---|
유니티 2D 기초 - 2D Animation 실습 (0) | 2024.04.30 |
유니티 2D 기초 - 플랫폼 게임에서의 플레이어 이동, 점프 구현 (0) | 2024.04.30 |
유니티 2D 기초 - 게임오브젝트 삭제 함수 (0) | 2024.04.14 |
유니티 2D 기초 - Instantiate() 활용 예제 (0) | 2024.04.14 |