일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 환급챌린지
- Tween
- 오공완
- DotsTween
- sha
- base64
- 패스트캠퍼스후기
- AES
- 프레임워크
- unity
- job
- Job 시스템
- C#
- 암호화
- Custom Package
- 최적화
- RSA
- 2D Camera
- 패스트캠퍼스
- ui
- 샘플
- 직장인자기계발
- 가이드
- TextMeshPro
- 커스텀 패키지
- 직장인공부
- Framework
- Dots
- Unity Editor
- adfit
- Today
- Total
목록Unity/최적화 (9)
EveryDay.DevUp

Unity 5.5 미만 버전에서 foreach를 사용할 경우 가비지가 발생하는 이슈가 있었다. 원인 - Mono C# Unity 버전에서 foreach loop 종료 시 값을 강제로 박싱 - 값 형식의 열거자를 생성하였는데, 해당 열거자를 사용할 경우 loop가 종료되는 시점에 IDisposable 인터페이스를 구현 해야 했음 - 인터페이스는 참조 형식이기 때문에, 값 형식을 인터페이스로 변환하는 중에 박싱이 발생하게 됨 참고 : https://everyday-devup.tistory.com/106 [Unity] Struct (구조체) Struct (구조체)? - 데이터와 관련 기능을 캡슐화할 수 있는 값 형식 캡슐화 : 데이터와 기능을 하나로 묶고, 구현 내용 일부를 외부에 감춤 특징 1. 매개 변수가..

게임 개발을 여러사람이 진행할 경우, 숙련도에 따라 어셋을 임포트할 때 정해둔 규칙을 따르지 않는 실수가 발생할 수 있다. 예를들어 ui 텍스쳐를 임포트할 때 read/write 옵션을 꺼야하는데 끄는 경우가 있을 수 있고, 텍스쳐 포맷을 잘 못 설정하는 경우가 발생할 수 있다. 개발 과정 중에 체크를 할 수 있다면 다행이지만, 사람은 누구나 실수를 할 수 있기 때문에 코드로 사람의 실수를 방어 할 필요가 있다. 프로젝트마다 정하는 규칙이 다르기때문에 해당 코드를 일반화하기는 어려울 것이다. 그래서 Unity는 어셋이 변경이 될 때 콜백을 받을 수 있도록 하였다. 콜백을 받으려면 AssetPostProcessor를 상속받아, 변경이 발생했을 때 콜백을 받을 수 있도록 어셋의 타입에 따른 함수를 정의하면 ..

● Sprite Atlas : 여러개의 스프라이트를 하나의 텍스쳐로 합쳐서 관리함으로써 드로우콜을 낮추는 방법입니다. ● Sprite Atlas 는 왜 사용해야하는가? ▶ Draw Call 사용 횟수를 줄임으로 써 게임을 최적화 할 수 있습니다. : 1개의 이미지를 나타내기 위해서는 Draw Call이 1번 필요합니다. : 이미지 1개의 Draw Call이 하나라면, 하나의 이미지 안에 여러 개의 이미지를 나누고 나눠진 이미지를 사용한다면 Draw Call 도 1번만 사용하면 된다는 예상을 할 수 있습니다. ● Sprite Atlas 을 사용 방법 : 사용할 이미지를 아틀라스로 묶으면, 자동으로 UI에서 참조하고 있던 이미지를 플레이 시에 Draw Call 한번에 그립니다. ● Sprite Atlas 상..

● 9-Slice 이미지 : 이미지를 9개로 분할하여 D, F 영역은 세로로 늘리고 B, H 영역은 가로로 늘리고 E 영역은 가로 세로로 늘리거나 타일링 하여 이미지를 처리하는 것을 이야기합니다. : A, C, G, I 영역은 크기를 변경하지 않고 유지합니다. : 9-Slice는 Android 및 다양한 플랫폼에서 사용되고 있습니다. ● 9-Slice 사용 시 이미지의 모습 ▶ Image Type이 Simple일 때는 원본 이미지 전체를 가로로 늘린 모습을 볼 수 있습니다. ▶ Image Type을 Sliced로하면 9개의 사각형 메시로 나뉘어져 B, D, E, F, H 영역이 늘어나고, A,G,C,I는 그대로 그리면서 자연스러운 사각형을 볼 수 있습니다. ▶ Image Type을 Tiled로하면 9개의..

● Draw Call이란? : CPU가 GPU에게 오브젝트를 그려라 라는 명령을 내리는 것 ▶ 그려라 라는 명령 안에는 메시 정보, 텍스쳐 정보, 쉐이더 정보, 라이트 정보 등 하나의 오브젝트를 그리기 위한 정보가 담겨짐 ▶ 한 프레임이 그려지는 것은 CPU, GPU의 작업이 모두 끝났을 때가 됨. 게임 최적화를 위해서는 CPU의 부하인지, GPU의 부하인지를 체크 해야함 ▶ Unity에서는 Batch ( 그리라는 명령 + 상태 변경 )을 넓은 의미의 Draw Call이라고 하며, SetPass는 쉐이더로 인한 렌더링 패스 횟수을 이야기 함 ● Draw Call이 발생하는 경우 ▶ 하나의 오브젝트에 메시가 여러 개인 경우 ▶ 하나의 오브젝트에 여러개의 메터리얼이 있는 경우 ▶ 하나의 쉐이더에 멀티 패스가..

● UGUI : Unity에서 제공하는 Built-in UI 시스템 ▶ Unity 초기 UI 시스템은 매우 불편하였고, Asset Store에 UI를 용이하게 사용할 수 있는 EZGUI, NGUI와 같은 UI 어셋이 있었다. ▶ Unity 4.6 버전에서 UGUI가 릴리즈 되었는데, NGUI의 개발자가 Unity에 합류하여 개발해서 그런지 많은 시스템이 NGUI와 유사하다. ▶ 현재는 NGUI도 많이 사용하지만, UGUI도 많이 사용하여 개발하는 상황으로, 엔진 단에 코어한 코드( Canvas.. )를 제외한 나머지 UI 시스템은 오픈되어 있다. : UGUI 코드를 분석하면, UI 시스템 외에 Unity Custom Editor를 만들 때 사용할만한 코드와 Unity의 코드 스타일 같은 것도 알 수 있다..

Unity에서 가이드하는 GC 최적화 1. GC 호출 시기를 짧은 주기로 반복적으로 실행 ▶ GC가 필요 이상 호출되지만, 짧은 주기로 실행되기 때문에 그 사이에 쌓인 메모리가 적어 빠르게 GC가 수행됨 2. 초기 큰 힙 메모리를 설정 ▶ Mono는 런타임에 힙을 확장하는 것을 최대한 회피하려고 하기 때문에, 수동으로 큰 배열을 만들어 강제로 힙 메모리를 키움 ▶ 초기 메모리가 크게 할당 되기 때문에 메모리 부족으로 인한 GC 호출을 최소화 할 수 있음 3. 재사용 가능한 오브젝트 풀 생성 ▶ 반복적으로 생성/삭제 되는 게임 오브젝트를 Pool로 관리함으로써 최소한의 오브젝트 생성으로 메모리를 관리 4. 점진적 가비지 콜렉션 사용 ▶ Unity에서 현재 프리뷰로 제공하는 기능으로써, GC의 수행을 분할하..

Unity에서 메모리에 영향을 줄 수 있는 어셋의 설정은 다음과 같다.* Texutre▶ Mipmap : 근거리에서만 보여지는 경우에는 끄는 것이 메모리에 좋음▶ Read/Write Enabled : 해당 옵션이 켜져있는 경우 로드할 때 GPU와 NATIVE HIP 메모리에 둘다 올라감( Web에서 다운로드 받는 Texture (ex 배너 이미지 )와 같은 경우 Read/Write Enabled이 켜져 있음으로 코드에서 옵션을 꺼야함 )▶ Format * Model▶ Read/Write Enabled : 해당 옵션이 켜져있는 경우 로드할 때 GPU와 NATIVE HIP 메모리에 둘다 올라감* Audio▶ 200KB가 기준인 이유는 압축된 오디오를 해제하는 버퍼의 사이즈이기 때문 * iOS 메모리▶ Dir..

■ Unity GameObject에 기본 컴포넌트인 Transform은 변경이 발생할 경우, Unity 내부적으로 OnTransformChanged가 호출됨부모 ■ GameObejct가 변경되는 경우 OnBeforeTransformParentChange, OnTransformParentChanged가 호출 됨 ■ GameObject에 Pysics 컴포넌트가 있다면 Physics Scene도 업데이트가 호출됨 위의 이슈로 인해, GameObject 하위의 GameObject가 많을 수록 비용이 증가하게 됨 ( 부모 오브젝트의 포지션, 로테이션, 스케일 값이 자식 오브젝트에 영향을 줄 수 밖에 없는 계층구조이기 때문에 발생하는 일 ) 최적화 고려할 점 ▶ (중요) Tranform이 변하는 GameObject..