영상 필기 - [유니티 TIPS] 모바일 게임 성능 최적화

 

https://www.youtube.com/watch?v=1mJtoceqvro 

읽고, 애매하게 알고있던 부분이나 놓치기 쉬운 부분 메모.

 

1. string 파싱에서 발생하는 가비지 

30분 10초

기획데이터 JSON이나 XML로 두고서 데이터 파싱하는 경우가 많을 텐데,

이런 string 파싱에서 가비지가 발생하는 경우가 많아서 빌드 전에 에디터에서 ScriptableObject로 데이터를 캐싱해놓고 사용하는 것을 추천한다. (프리 빌드 프로세서로 자동화하면 실수할 일은 없을 것 같다.)

 

2. 애니메이터 등의 파라미터를 string으로 호출할 때의 가비지

31분 00초

animator.SetBool("Jump", true);

매번 string으로 호출하면 가비지 발생우려. ID로 캐싱해서 호출하는 것을 추천한다.

(Animator.StringToHash)

 

3. 오브젝트 풀을 만들 때 부모변경 주의할 것

41분 20초

하이어라키에서 예쁘게 보이게 하고싶어서 enable 부모, disable 부모 만들어서 부모 계속 바꾸는 행위는 하지 말것.

SetParent 함수는 비용이 꽤 무겁다. 

 

4. 런타임에서 AddComponent는 최대한 피할 것

39분 11초

AddComponent를 사용해서 여러개의 컴포넌트를 스폰할때 붙여서 몬스터의 패턴을 만드는 식의 구조는 굉장히 무겁다.

가급적 별도로 프리팹 varient등으로 대체하도록 하자.

(불가피한 상황도 있긴 할듯)

 

5. 프로젝트 세팅

46분 12초

AccelerometerFrequency (중력센서) OFF

 

6. Instantiate할 때는 트랜스폼을 같이 초기화하는게 이득

// 나쁜 예
var obj = Instantiate(prefab, parent);
obj.transform.position = position;
obj.transform.ratation = rotation;
// 좋은 예
Instantiate(prefab, parent, position, rotation);

 

7. Vsync는 끄려고해도 모바일 하드웨어에서 강제로 켜는 경우가 많음.

때문에 코드상으로 Vsync를 끈다고 해도 Vsync가 꺼진다는 보장이 없음. 

 

 

- 여기서부터는 2편 -

https://www.youtube.com/watch?v=RLcSRuZsZQU 

 

1. 음악파일은 wav 원본 그대로 쓰자

어차피 유니티에서 다시 압축하기 때문에 mp3를 썼을 때의 이득은 플젝용량이 줄어든다는것 밖에 없음.

(그렇다고 이미 압축된 mp3를 wav로 바꾸는짓은 하지말 것)

 

2. 텍스쳐, 3d Mesh의 Read/Write Enabled 체크박스

끄자!

CPU에서 GPU로 메모리를 옮기고 CPU에서는 내린다. (어차피 모바일은 물리적으론 한개를 논리적으로 나눈거지만)

체크한 경우에는 CPU에서 메모리를 내리지 않는다. 메모리가 중복된다. 

텍스쳐를 동적으로 조작한다면 당연히 켜야되지만, 뭔지 모른다? 그냥 끄자.

 

3. 화면 해상도 조절

Screen.SetResolution(width, height, false)

URP 에서는 Render Scale로 조절가능.

https://github.com/ozlael/UpsamplelingRenderingDemo

 

4. Renderer.material 접근 주의

Renderer.material 접근하는 순간 복사본이 만들어진다.

(DoTween으로 material 접근하는 경우가 많아서 알아봐야할 듯)

 

5. GraphicRayCaster

Canvas최상단의 GraphicRayCaster는 삭제하고 하위에서 따로 붙여주면 성능적으로 이득이다.

 

6. 사운드 압축 포멧

요즘 버전의 유니티는 Android iOS 상관없이 Vorbis를 사용하면 된다.

짧은건 ADPCM으로.

 

 

 

 

 

 

 

 

댓글

Designed by JB FACTORY