일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 최적화
- 프레임워크
- 패스트캠퍼스
- 환급챌린지
- Job 시스템
- 샘플
- 커스텀 패키지
- DotsTween
- 2D Camera
- RSA
- C#
- Unity Editor
- AES
- 가이드
- base64
- 직장인공부
- 패스트캠퍼스후기
- job
- TextMeshPro
- 직장인자기계발
- sha
- 오공완
- unity
- Custom Package
- adfit
- Framework
- Tween
- Dots
- 암호화
- ui
- Today
- Total
목록최적화 (8)
EveryDay.DevUp

Project-ML에서 SPUM을 통해 만들어진 캐릭터는 스프라이트 애니매이션을 통해 화면에 보여주고 있음Q. 스프라이트 아틀라스를 사용할 때와 사용하지 않을 때 어떤 차이가 있을것인가?.1. 이론- 스프라이트 아틀라스를 통해 스프라이트를 합칠 경우 메모리에 합쳐진 한 장의 스프라이트 이미지가 올라갈 것으로 예상- 현재 캐릭터는 Move / Attack / Idle / Die 4개의 애니매이션과, 각각 스프라이트 한 장씩 총 4장을 사용함2. 검증 방법2.1. 스프라이트 아틀라스를 사용할 때와 사용하지 않을 때 윈도우 환경으로 빌드 후 메모리 프로파일러 실행: 각 빌드는 Clean Build를 사용2.2. Unity Objects 를 비교한 결과 확인 3. 결론- 스프라이트 아틀라스를 사용할 경우 4M..

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

● 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의 가비지 컬렉터에 대해 설명하고자 한다. C# 은 기본적으로 메모리를 자동으로 관리 해줌* C# 메모리 : https://everyday-devup.tistory.com/10[Unity] C#에서의 메모리* Heap ▶ 위치가 정해져 있지 않고 용량이 큰 대신 느림 ▶ 참조 타입 ( ex class, string, object ) ▶ 변수 선언 시 데이터가 저장되어있는 메모리를 가리키게 됨 * Stack ▶ 정렬되어 있고 빠르지만 사용에..everyday-devup.tistory.com● Stack의 메모리 관리 ▶ Stack은 Last In First Out 구조로 순서대로 값 타입의 변수가 설정되고, 사용이 종료되는 시점에 메모리가 반환 됨 ▶ 사용이 종료되는 시점에 메모리가 반환 되기 때..

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..