---
title: 优化指南
slug: world-sdk-guide-ch/CSZyJ9rfNYrtLYrK46Zhw
docTags: 
createdAt: 2024-09-02T08:34:13.137Z
---

## 内存

- ZEPETO 被设计为将世界中使用的资源预加载到内存中。
- 基于 1.7.0 版本，最低规格设备为 iPhone 8（2GB RAM）和 Galaxy S8（4GB RAM）。
- 因此，我们需要确保它不超过 2GB。
  - 最低规格设备可能会在以后更改。
- 在多人世界的情况下，内存应考虑到最大人数进行管理，因为每个角色都有内存。



## 如何检查性能指标

### 如何在移动环境中检查性能指标

- 请使用 ZEPETO 官方提供的运行时分析器。

:::hint{type="info"}
**📘&#x20;**&#x8BF7;参考以下指南。 \[[运行时分析器](docId\:ZTW2o0AYfoqPX4xIjLnyw)]
:::



### 如何在本地开发环境中检查世界多人服务器的性能指标

如果您使用 VS Code 作为脚本编辑器，可以通过插件检查本地开发环境服务器的各种性能指标，例如 CPU 使用率、内存使用率等。

:::hint{type="info"}
**📘&#x20;**&#x8BF7;参考以下指南，了解如何在 Unity 中将 VS Code 设置为脚本编辑器。

\[[https://code.visualstudio.com/docs/other/unity\\](https://code.visualstudio.com/docs/other/unity\\)]
:::



1\) 在 VSCode 窗口左侧的 \[扩展] 面板中搜索并安装 `JavaScript 性能分析的 Flame Chart Visualizer`。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-hll55lh-9o1EHZd-HrU-q-20240904-102410.png)



:::hint{type="danger"}
- 插件检查的本地开发环境的性能指标可能与实际服务环境不同。请使用它来了解世界多人服务器逻辑的大致性能趋势和潜在性能问题。
- 如果 VS Code 的工作目录未设置为世界项目，插件将无法正常工作。请确保在 \[资源管理器] 面板中选择正确的项目文件夹。
:::



2\) 转到 VS Code 中的 \[运行和调试] 面板，并将调试类型更改为 Zepeto 多人脚本。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-rXoHCf-J6WhpZw-XxMUOu-20240904-102410.png)



3\) 在Unity屏幕上按下播放按钮以运行世界，并在VS Code中按下\[开始调试]按钮以开始运行时调试。

您可以在\[运行和调试]面板中实时检查多人服务器的性能指标。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-qKbcl6UuBL_s5e7j-H3ym-20240904-102410.png)



:::hint{type="success"}
👍 提示&#x20;

- 您可以通过点击\[运行和调试]面板中的切换可见性能图表按钮来添加以下性能指标。
  - CPU使用率
  - 已使用堆
  - 堆总计
  - 常驻集大小
  - 外部内存
  - ArrayBuffer内存

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-kK0S0tnfNoZe3JCm-22gs-20240904-102410.png)
:::



### 推荐优化指南

请根据以下标准进行优化，以确保发布的世界在最低规格上运行。

- 最低规格设备（2GB RAM）在以下情况下崩溃：
  - 运行时分析器 > 分配内存超过 **550MB** 的平均值。
    - ![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-6tEdti_ACfRhu2LY51PF_-20240904-102410.png)
  - 当世界实际运行时，不仅世界资源在运行，各种进程也在内存中运行，因此建议在分配内存中留出一些空间。
- 对于多人世界，每个角色都有内存分配，因此需要根据最大玩家数量管理内存。
  - 每个ZEPETO角色的平均内存： **35MB**
    - 如果使用ZEPETO角色类型的人偶，它占用的内存与一个ZEPETO角色进入时相同。
    - 为了优化，我们建议尽可能使用简单类型的人偶。
  - 平均为 **280MB** 当最多8人进入时
    - 这些是平均数据；如果可能，请在发布前通过实际让最多人数进入来测试您的分配内存。

## 每秒帧数 (FPS)

- 最大帧数限制为30帧每秒。



## 容量

- 包容量限制为最多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()中调用。
- 实例化和销毁会产生垃圾和垃圾收集，从而减慢过程。因此，尽量使用对象池进行重用。
- Renderer.material尽可能使用Renderer.sharedMaterial来访问绑定对象的材质，因为创建新副本并返回是非常昂贵的。



## 关于用户界面可以改进的地方

- 根据目的，划分画布，并将未使用的画布设置为不可见。
- 限制 GraphicRaycasters 并清除 Raycast Target。从画布中删除 GraphicRaycaster，并将 Graphic Raycaster 单独插入到各个元素中，例如按钮。
- 如果文本或图像中不需要 Raycast Target，请删除它。
- 除非是动态用户界面，否则避免使用布局组。使用锚点进行组织。
- 大型列表和网格视图开销很大，因此避免使用它们。
- 在使用全屏用户界面时，隐藏除该画布以外的所有内容。这消除了相机渲染 3D 场景的需要。它还隐藏了不必要的画布。
- 降低 Application.targetFrameRate，因为在使用全屏用户界面时不需要每秒更新 60 帧。
- 不要为使用世界空间的画布的渲染相机留空白，并用您使用的相机填充它。
  - 如果留空，Unity 将自动填充 camera.main。



## 音频可以改进的地方

- 将声音剪辑更改为单声道。
- 支持使用WAV文件。任何压缩的音乐文件将在构建时被解压缩，然后重新压缩。在此过程中，音乐文件的质量会下降。
- 压缩剪辑并降低压缩比特率。
- 使用大多数Vorbis文件，并将短声音更改为ADPCM。
- 不要超过22,050 Hz。
- 选择适当的加载类型。
  - 对于大小为200 kb或更小的音乐文件，加载时解压缩。
  - 对于大小为200 kb或更大的音乐文件，保持在内存中压缩。
- 将大文件和背景音乐设置为流式传输。
- 静音的音乐文件不能仅通过将音量更改为零来结束，因此请确保它们被销毁。

