MANAGE YOUR WORLD
Testing & Optimization
최적화 가이드
14 분
메모리 zepeto는 월드 에서 사용되는 리소스를 메모리에 미리 로드하도록 구조화되어 있습니다 월드 버전 1 7 0을 기준으로 할 때, 최소 사양 장치는 iphone 8 (2gb ram)과 galaxy s8 (4gb ram)입니다 따라서 2gb를 초과하지 않도록 해야 합니다 최소 사양 장비는 나중에 변경될 수 있습니다 멀티플레이어 월드 의 경우, 각 캐릭터가 메모리를 가지고 있기 때문에 최대 인원을 고려하여 메모리를 관리해야 합니다 성능 지표 확인 방법 모바일 환경에서 성능 지표 확인 방법 zepeto에서 공식적으로 제공하는 공식 런타임 프로파일러를 사용해 주세요 📘 다음 가이드를 참조해 주세요 \[ runtime profiler docid\ geucx0pstjpxdwghrfyfn ] 로컬 개발 환경에서 월드 멀티플레이어 서버의 성능 지표를 확인하는 방법 vs code를 스크립트 편집기로 사용하는 경우, 플러그인을 통해 로컬 개발 환경 서버의 cpu 사용량, 메모리 사용량 등 다양한 성능 지표를 확인할 수 있습니다 📘 unity에서 vs code를 스크립트 편집기로 설정하는 방법에 대한 가이드를 참조하십시오 \[ https //code visualstudio com/docs/other/unity\ https //code visualstudio com/docs/other/unity\ ] 1\) vscode 화면 왼쪽의 \[확장] 패널에서 javascript 프로파일을 위한 flame chart visualizer 를 검색하여 설치합니다 플러그인에 의해 확인된 로컬 개발 환경의 성능 지표는 실제 서비스 환경과 다를 수 있습니다 이를 사용하여 월드 멀티플레이 서버 로직의 대략적인 성능 추세와 잠재적인 성능 문제를 이해하시기 바랍니다 vs code의 작업 디렉토리가 월드 프로젝트로 설정되지 않은 경우, 플러그인이 올바르게 작동하지 않습니다 \[탐색기] 패널에서 올바른 프로젝트 폴더를 선택해야 합니다 2\) vs code의 \[실행 및 디버그] 패널로 이동하여 디버깅 유형을 zepeto 멀티플레이 스크립트로 변경합니다 3\) 유니티 화면에서 재생 버튼을 눌러 월드 를 실행하고, vs 코드에서 \[디버깅 시작] 버튼을 눌러 런타임 디버깅을 시작합니다 멀티플레이어 서버의 성능 지표를 \[실행 및 디버그] 패널에서 실시간으로 확인할 수 있습니다 👍 팁 \[실행 및 디버그] 패널에서 성능 차트 표시 전환 버튼을 클릭하여 다음 성능 지표를 추가할 수 있습니다 cpu 사용량 사용된 힙 총 힙 상주 집합 크기 외부 메모리 arraybuffer 메모리 추천 최적화 가이드라인 최소 사양으로 작동하는 월드 가 출시되도록 다음 기준에 따라 최적화해 주십시오 최소 사양 장치(2gb ram 포함)는 다음과 같은 경우 충돌합니다 런타임 프로파일러 > 할당된 메모리가 초과됨 550mb 평균적으로 월드 가 실제로 실행될 때, 월드 자원뿐만 아니라 다양한 프로세스가 메모리에서 실행되므로 할당된 메모리에 여유 공간을 두는 것이 좋습니다 멀티플레이어 월드 의 경우, 캐릭터당 메모리 할당이 있으므로 최대 플레이어 수에 따라 메모리를 관리해야 합니다 zepeto 캐릭터당 평균 메모리 35mb zepeto 캐릭터 유형의 마네킹을 사용하면, 한 zepeto 캐릭터가 들어올 때와 동일한 메모리를 차지합니다 최적화를 위해 가능하면 간단한 유형의 마네킹을 사용하는 것이 좋습니다 최대 280mb 8명이 들어올 때 평균 이것은 평균 수치입니다; 가능하다면 출시 전에 최대 인원이 들어오는 실제 테스트를 통해 할당된 메모리를 확인해 주십시오 fps (초당 프레임 수) 최대 fps 제한은 30fps입니다 용량 패키지 용량은 최대 1gbyte로 제한됩니다 world 1 8 0에서 제공하는 크로스 월드 이동 기능을 통해 용량 문제를 간접적으로 해결할 수 있습니다 최적화 방법 unity 최적화와 관련된 정보를 참조하십시오 https //docs unity3d com/kr/2019 4/manual/mobileoptimizationpracticalscriptingoptimizations html https //docs unity3d com/kr/2019 4/manual/mobileoptimizationpracticalscriptingoptimizations html 자원에 대해 개선할 수 있는 점 사용하지 않는 패키지 폴더와 파일을 삭제해 주세요 프로젝트의 객체 수와 지형의 나무/풀 수를 조정해 주세요 코드에 대해 개선할 수 있는 점 코루틴 사용 yield는 쓰레기를 생성하지 않지만, 새로운 waitforseconds를 만들면 쓰레기가 생성됩니다 따라서 객체를 생성하고 사용하세요 update( )에서 매 프레임마다 호출할 필요가 없는 부분을 n 프레임마다 호출할 수 있도록 교체합니다 awake( ), onenable( ), start( )에서 무거운 로직 함수를 호출하지 않도록 하세요 빈 함수라도 update( )와 lateupdate( )를 남겨두지 않도록 하세요 런타임에 컴포넌트를 추가하지 않도록 하세요 필요하다면 프리팹을 인스턴스화하는 것이 더 효율적입니다 gameobject find, gameobject getcomponent, camera main은 비용이 많이 들므로 update()에서 호출하지 말고 필요하다면 start()에서 호출하세요 instantiate와 destroy는 쓰레기를 생성하고 쓰레기 수집으로 프로세스를 느리게 합니다 대신 풀을 사용하여 재사용해 보세요 renderer material은 가능한 한 renderer sharedmaterial을 사용하여 바인딩된 객체의 머티리얼에 접근하세요 새로운 복사본을 만드는 것은 너무 비쌉니다 ui에서 개선할 수 있는 점 목적에 따라 캔버스를 나누고 사용하지 않는 캔버스는 보이지 않게 설정합니다 graphicraycasters를 제한하고 raycast target을 지웁니다 캔버스에서 graphicraycaster를 지우고 버튼과 같은 개별 요소에 graphic raycaster를 별도로 삽입합니다 텍스트나 이미지에서 raycast target이 필요하지 않다면 삭제합니다 동적 ui가 아닌 경우 layout groups 사용을 피합니다 앵커를 사용하여 정리합니다 대형 목록 및 그리드 뷰는 비용이 많이 들므로 사용을 피합니다 전체 화면 ui를 사용할 때는 이 캔버스를 제외한 모든 것을 숨깁니다 이는 카메라가 3d 장면을 렌더링할 필요를 없애줍니다 또한 불필요한 캔버스를 숨깁니다 전체 화면 ui를 사용할 때는 application targetframerate를 낮춥니다 60fps로 매번 업데이트할 필요가 없습니다 world space를 사용하는 캔버스의 렌더 카메라에 빈 공간을 남기지 말고, 사용하는 카메라로 채웁니다 빈 공간을 남기면 unity가 자동으로 camera main으로 채웁니다 오디오에 대해 개선할 수 있는 점 사운드 클립을 모노로 변경하십시오 wav 파일 사용을 가능하게 합니다 모든 압축된 음악 파일은 빌드 시간 동안 압축 해제되고 다시 압축됩니다 이 과정에서 음악 파일의 품질이 저하됩니다 클립을 압축하고 압축 비트 전송률을 낮추십시오 대부분의 파일을 vorbis로 사용하고 짧은 사운드를 adpcm으로 변경하십시오 22,050 hz를 초과하지 마십시오 적절한 로드 유형을 선택하십시오 크기가 200 kb 이하인 음악 파일의 경우, 로드 시 압축 해제하십시오 크기가 200 kb 이상인 음악 파일의 경우, 메모리에서 압축된 상태로 유지하십시오 대용량 파일과 배경 음악을 스트리밍으로 설정하십시오 음소거된 음악 파일은 단순히 볼륨을 0으로 변경하는 것으로 끝나지 않으므로, 반드시 삭제되도록 하십시오