Memory
- 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.
Profiling method
- Please use the official Runtime Profiler provided by ZEPETO.
Please refer to the following guide. [Runtime Profiler]
Recommended Optimization Guidelines
Please optimize according to the following criteria to ensure the world released operates on the minimum specifications.
- Minimum specification device (with 2GB RAM) crashes when:
- Runtime Profiler > Allocated Memory exceeds 550MB on average.
-
- When the World is actually running, not only the World resources but also various processes are running in memory, so it is recommended to leave some space in the Allocated Memory.
- Runtime Profiler > Allocated Memory exceeds 550MB on average.
- For multiplayer Worlds, there is a memory allocation per character, so you need to manage memory based on the maximum number of players.
- Average memory per ZEPETO character: 35MB
- If you use a mannequin of the ZEPETO character type, it occupies the same memory as when one Zepeto character enters.
- For optimization purposes, we recommend using the Simple type of mannequin if possible.
- Average of 280MB when up to 8 people enter
- These are average figures; please test your Allocated memory by actually having the maximum number of people enter before launch, if possible.
- Average memory per ZEPETO character: 35MB
FPS (Frames Per Second)
- The maximum FPS limit is 30FPS.
Capacity
- 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.
Optimization method
- Please refer to the information related to Unity optimization.
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.