Studio GuideWorld SDK Guide
Log In

Optimization guide


  • ZEPETO is structured to preload resources used in the world into memory.
  • Based on 1.7.0 in the world, the lowest specification devices are iPhone 8 (2GB RAM) and Galaxy S8 (4GB RAM).
  • Therefore, we need to make it so that it does not exceed 2GB.
    • The minimum specification equipment may be changed later.
  • In the case of a multiplayer world, the memory should be managed considering the maximum number of people because each character has memory.

FPS (Frames Per Second)

  • The maximum FPS limit is 30FPS.


  • Package capacity is limited to up to 1GByte.
  • With the cross-world movement feature provided by World 1.8.0, you can indirectly resolve the capacity part.

Profiling method

  • Please use the official Runtime Profiler provided by ZEPETO.


Please refer to the following guide. [Runtime Profiler]

Optimization method

What can be improved about the resources

  • Please delete unused package folders and unused files as well.
  • Please adjust the number of objects in the project and the number of trees/pools in the terrain.

What can be improved about the code

  • Using Coroutines: yield doesn't produce garbage, but making new waitForSeconds will produce garbage. Therefore, create and use the objects.
  • In Update ( ), the parts that do not need to be called every frame are replaced so that they can be called every n frame.
  • Avoid calling heavy logic functions in Awake( ) OnEnable( ) Start( ).
  • Avoid leaving Update ( ) and LateUpdate ( ) even for empty functions.
  • Avoid adding components at runtime. If necessary, it is more efficient to instantiate the prefab.
  • GameObject.Find, GameObject.GetComponent, and Camera.main are expensive, so do not call from Update() but call from Start() if necessary.
  • Instantiate and destory produce garbage and garbage collections to slow down the process. Instead, try to reuse it with pools.
  • Renderer.material uses Renderer.sharedMaterial whenever possible to access the bound object's material since it is too expensive to make a new copy and return it.

What can be improved about the UI

  • Depending on the purpose, divide the canvas and set the canvas that is not used as invisible.
  • Limit the GraphicRaycasters and clear the Raycast Target. Erase the GraphicRaycaster from the canvas and insert the Graphic Raycaster separately into individual elements, such as buttons.
  • If you don't need Raycast Target in text or images, delete it.
  • Avoid using Layout Groups unless it is a Dynamic UI. Use the anchor to organize it.
  • Large List and Grid Views are expensive, so avoid using them.
  • When using the full screen UI, hide everything except this canvas. It eliminates the need for the camera to render the 3D scene. It also hides unnecessary canvases.
  • Lower the Application.targetFrameRate because you do not need to update every 60 fps when using the full screen UI.
  • Don't leave a blank space for the render camera of the canvas that uses World Space, and fill it in with the camera you use.
    • If you leave a blank, Unity will automatically fill in the camera.main.

What can be improved about the audio

  • Change the sound clip to mono.
  • Enables the use of WAV file. Any compressed music file will be decompressed and then re-compressed during the build time. The quality of the music file is degraded during this process.
  • Compress the clip and lower the compression bit rate.
  • Use most of the files with Vorbis, and change the short sound to ADPCM.
  • Do not exceed 22,050 Hz.
  • Select the appropriate load type.
    • For music files with size 200 kb or less, Decompress on Load.
    • For music files with size 200 kb or more, remain Compressed in Memory.
  • Set large file and background music to set to streaming.
  • Muted music files do not end by simply changing the volume to zero, so make sure that they are destroyed.