본문 바로가기
유니티/3D RPG

20 게임 최적화

by 노오오오오옹 2020. 6. 7.

 기능

PC에서는 원할한 구동이 되었지만, 모바일에서는 그렇지 않았다. 그렇기에 1. 오클루전 컬링 2. 라이트 맵핑 3. 오브젝트 풀링등을 이용해 GC를 최대한 적게 호출하였다.

※ 참고 사항

1. 오클루전 컬링 : 카메라에 보이지 않는 오브젝트의 렌더링을 비활성화 시켜 랜더링할 오브젝트 수를 줄인다.

1-1 오클루디 : 다른 오브젝트를 가리지 않는 투명한 소재거나 가리는 영역이 매우 작은 오브젝트

2. 라이트매핑 : 라이트매핑은 씬의 표면 밝기를 미리 계산 Batch의 수를 줄여준다. 특정 맵에서 조명(실시간 조명 제외)을 사용하는 경우 라이트 매핑을 이용한다.

3. 오브젝트 풀링 : Instantiate과 Destroy의 경우 GC를 호출하게된다. 그렇기에 생성/제거를 하는 오브젝트들은 SetActive를 통해 생성/제거한 것 처럼 보여주자.

4. 기타 등등 : 문자열 readonly을 사용하고, 박싱과 언박싱 최소화, 문자열 병합시 StringBuilder 활용

4-1 문자열 병합에서 짧은 횟수를 더할때는 오히려 '+' 기호를 이용하는 것이 효율적이다. 다만 단어가

길거나, 반복의 경우 StringBuilder가 효율적이다.

 

 코드

더보기

몬스터 ID에 해당하는 몬스터가 없는 경우 CreateMonster를 사용하고, 있다면 기존에 있는 몬스터를 가져온다. 여기서 활성/비활성 여부를 보기 쉽도록 인스펙터의 위치를 달리한다. Project나 FloatingText(피격시 데미지) 또한 동일한 형태로 작성한다.

 

 구현 영상

 

오클루전 컬링 : 던전에서 Batch수가 많다보니 모바일에서 랙이 심하였다. 적용후 1/3 정도로 줄여졌다.
라이트매핑 : 실시간 조명을 제외한 조명들을 미리 Bake를 하여 계산수를 줄였다. 
오브젝트 풀링 : 생성/제거가 필요한 몬스터, 프로젝트, 화면에서는 표시되지 않은 피격시 데미지(FloatingText) 3가지를 풀링에서 활용

 

 

 리펙토링

 

 

'유니티 > 3D RPG' 카테고리의 다른 글

22 던전 시스템  (0) 2020.06.09
21 스킬 시스템  (0) 2020.06.08
19 아이템 드래그/드랍  (0) 2020.06.06
18 비헤이비어 트리  (0) 2020.01.20
17 퀘스트 시스템  (0) 2020.01.16

댓글