This article documents a fix for WebGL build failures when using the Brotli compression option in Unity 2018.3.

The Phenomenon

When WebGL build is performed with the Brotli compression option enabled in Unity 2018.3, the following error occurs:

ExecutionFailedException: BuildPostprocessor.CompressBuild
  at UnityEditor.WebGL.WebGlBuildPostprocessor.CompressBuild (UnityEditor.Modules.BuildPostProcessArgs args)
  at UnityEditor.Modules.BuildPipeline:BuildPostProcess (BuildPostProcessArgs args)
  at UnityEditor.Modules.BuildPipeline:BuildPostProcess (BuildPostProcessArgs args)
  at UnityEditor.Modules.BuildPipeline:BuildContent (BuildContent content, BuildPref[] dependencies)
  at UnityEditor.BuildPipeline:Build (BuildPlayerOptions options, BuildPlayerOptions& outOptions)
  at UnityEditor.BuildPipeline:BuildPlayer (BuildPlayerOptions options)
  at UnityEditor.BuildPipeline:BuildPlayerWithDefaultOptions (Boolean incremental, BuildPlayerOptions& options)

Root Cause Analysis

The In Unity 2018.3, Unity’s BuildPostProcessor classes related to Brotli compression have compatibility issues. Specifically, the UnityEditor.WebGL.WebGlBuildPostprocessor.CompressBuild method executes the python command for Brotli compression, but encounters permission issues.

Solution Methods

sudo chmod 755 /Applications/Unity/Hub/Editor/2018.4.12f1/PlaybackEngines/WebGLSupport/BuildTools/python

2. Install Python (Alternative)

If system Python is not present, installing Python 3 directly and modifying Brotli folder permissions can be easier.

# Install Python 3
brew install python3

# Modify permissions
sudo chmod 755 /Applications/Unity/Hub/Editor/2018.4.12f1/PlaybackEngines/WebGLSupport/BuildTools/python

3. Use Lower Compatibility Version

Upgrading to Unity 2018.4 or later resolves this issue. However, depending on project circumstances, upgrading may be difficult.

Verification Method

  1. Open File > Build Settings… from Unity Editor menu
  2. Select Player SettingsWebGL
  3. Select Brotli under Compression Format
  4. Execute build

If build completes normally, the issue is resolved.

References