流式加载
初级 美术人员 程序员
当你对纹理进行**流式加载(Streaming)**时,Stride 只在需要时才加载它们。这显著缩短了加载游戏或场景的时间,占用更少的内存,并使你的游戏更容易扩展。
Note
目前只有纹理可以流式加载。
Stride 如何流式加载纹理
Stride 不会在加载场景时(连同所有 Mipmap 一起)加载纹理,而是只在使用该纹理时(例如使用该纹理的模型出现在屏幕上)才加载它。
当纹理不再需要时(即没有使用该纹理的对象出现在屏幕上),Stride 会卸载它。
目前,纹理没有加载优先级。例如,Stride 不会基于距离来加载纹理;相反,Stride 会按顺序加载所有纹理。
结合 Mipmap 使用流式加载
如果在纹理属性中启用了 Mipmap(在不同距离显示的不同分辨率版本的纹理),则分辨率较低的 Mipmap 会先加载,因为它们的体积更小。下面的 gif 以慢动作展示了这一过程。

在大多数情况下,这个过程非常快。我们建议你为流式加载启用 Mipmap,因为这意味着较低分辨率的纹理版本可以在加载高质量版本之前充当占位符,从而减少突然出现的现象。
何时不要使用流式加载
所有纹理默认都启用了流式加载。对于你希望始终立即高质量显示的重要纹理,你可能想要禁用流式加载,例如:
在纹理上启用或禁用流式加载
在资产视图中,选中该纹理。

在属性网格的 Format 下,使用 Stream 复选框。

全局流式加载设置
你可以在 Game Settings 资产中访问全局流式加载设置。这些设置适用于所有启用了流式加载的纹理。
有关如何访问全局流式加载设置的说明,请参阅游戏设置页面。
属性

| 属性 | 说明 |
|---|---|
| Streaming | 启用流式加载 |
| Update interval | Stride 更新流式加载的频率。间隔越短,流式加载系统响应越快,但会占用更多 CPU 并导致更大的内存波动。 |
| Max resources per update | 每次流式加载更新最多加载或卸载的纹理数量。数值越大,突然出现的现象越少,但可能降低帧率。 |
| Resource timeout (ms) | 资源不再使用后保持加载状态的时长(当超出内存预算时) |
| Memory budget (in MB) | 当流式加载使用的内存超出此预算时,Stride 会卸载未使用的纹理。如果你内存充足,可以增大此值以保持更多纹理处于加载状态,反之亦然。 |
在代码中访问流式加载管理器
使用 Streaming。
例如,要在全局范围内禁用流式加载,请使用:
Streaming.EnableStreaming = false;
要开始流式加载一个纹理:
Streaming.StreamResources(myTexture);
要在加载时禁用流式加载:
var texture = Content.Load<Texture>("myTexture", ContentManagerLoaderSettings.StreamingDisabled);
选项
共有三种 StreamingOptions:
KeepLoaded选项会使纹理即使在超出内存预算时也保持在内存中。如果启用了 Mipmap,
ForceHighestQuality选项只会加载纹理的最高质量版本。KeepLoaded选项会使纹理即使在未被使用时也保持在内存中。
例如:
var myOptions = new StreamingOptions() { KeepLoaded = true };
Streaming.StreamResources(myTexture, myOptions);
要在运行时更改 StreamingOptions,请使用 SetResourceStreamingOptions。例如:
var myNewOptions = new StreamingOptions() { KeepLoaded = false };
Streaming.SetResourceStreamingOptions(myTexture, myNewOptions);