unityでいってみよう!

unityがチョットワカル位の人のブログ

Unity2022以降でWebGLのMemorySizeを指定してみよう!

概要

以前、Unity2019以降向けの記事としてWebGLのMemorySizeの指定方法を投稿したのですが、Unity2022では設定方法が変更されていたので、改めてUnity2022以降向けの設定方法を記載します。

unityletsgo.hatenablog.com

設定方法

Player Settings > Publising settingsから設定を行います。

https://docs.unity3d.com/ja/2022.2/uploads/Main/WebGLBuilding-PublishingSettings.png

Initial Memory Size

WASM ヒープメモリの初期値を設定します。初期値は32MBです。 Unity2022以前は16MBの倍数で設定する必要があった為、最小値は16MBでしたが、Unity2022以降では16MBの倍数制限が無くなった為、それより小さい値を設定可能です。但し、7MB未満の値を指定した場合、Stack用の領域が確保出来ないという理由でビルドエラーになるいことを確認しています。つまり、Unity2022.2においてWASM ヒープメモリの最小値は7MBとなります。

Memory Growth Mode

WASMヒープメモリーが不足し、領域を拡張する必要がある場合、どのように拡張するかを指定することが出来ます。

None

この設定の場合、領域を拡張しません。つまりInitial Memory Sizeで指定した値が、WASMヒープの最大値となります。

Linear

Linear Memory Growth Stepで指定した、固定長で領域の拡張を行います。 Unity2022以前と互換性を保つのであれば、Memory Growth Mode:LinearLinear Memory Growth Step:16MBを指定することになります。

Geometric

Geometric Memory Growth StepGeometric Memory Growth Capから拡張する値を決定します。

Geometric Memory Growth Step

現在のヒープサイズにこの値をかけて、拡張する値を決定します。 例えば、現在のヒープサイズは16MBでGeometric Memory Growth Stepの値が0.2の場合、拡張する値は16 * 0.2 = 3.2MBとなります。

Geometric Memory Growth Cap

Geometric Memory Growth Stepに対する制限です。 例えば、この値が3MBの場合、Geometric Memory Growth Stepの値は3.2MBではなく3MBとなります。

Maximum Memory Size

拡張されたヒープの最大値です。 Memory Growth ModeがLinear及びGeometricの場合でも、この値を超えて拡張されることはありません。

スクリプトから指定する場合

相変わらずスクリプトリファレンスには記載がありませんが、各項目と変数名の対比は下記の通りです。

項目 変数名
Initial Memory Size PlayerSettings.WebGL.initialMemorySize
Maximum Memory Size PlayerSettings.WebGL.maximumMemorySize
Memory Growth Mode PlayerSettings.WebGL.memoryGrowthMode
Linear Memory Growth Step PlayerSettings.WebGL.linearMemoryGrowthStep
Geometric Memory Growth Step PlayerSettings.WebGL.geometricMemoryGrowthStep
Geometric Memory Growth Cap PlayerSettings.WebGL.memoryGeometricGrowthCap

以上です。