はじめに
ゲームジャムに参加している中で GitHub Actions上でのCD環境を構築していました。あるときからビルドが失敗するようになってしまったので、調査していると環境でのエラーに遭遇したのでメモしておきます。
環境
- Unity 2021.3.14f1
CD環境の環境ファイル
name: Build env: UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }} # Controls when the action will run. on: workflow_dispatch: {} push: branches: - main paths-ignore: - '.github/**' # Triggers the workflow on push or pull request events but only for the main branch # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: projectPath: - . unityVersion: - 2021.3.14f1 targetPlatform: - WebGL steps: - name: Checkout uses: actions/checkout@v2 with: lfs: true clean: false # Cache - uses: actions/cache@v2 with: path: Library key: Library # Build - name: Build project uses: game-ci/unity-builder@v2.0.4 with: unityVersion: ${{ matrix.unityVersion }} targetPlatform: ${{ matrix.targetPlatform }} - name: Deploy to GitHub Pages uses: JamesIves/github-pages-deploy-action@v4.4.0 with: branch: gh-pages folder: build # Output - uses: actions/upload-artifact@v2 with: name: Build-${{ matrix.targetPlatform }} path: build/${{ matrix.targetPlatform }}
現象
GitHub Actions(Linux)上でビルドするとエラーになって止まってしまう。
以下は Github actions上のエラーの一部です。
Serialized binary data for shader Hidden/Universal Render Pipeline/StencilDeferred in 0.00s gles3 (total internal programs: 0, unique: 0) Shader warning in 'Hidden/Universal Render Pipeline/StencilDeferred': Hidden/Universal Render Pipeline/StencilDeferred shader is not supported on this GPU (none of subshaders/fallbacks are suitable) Compiling shader "Hidden/Universal Render Pipeline/LutBuilderHdr" pass "LutBuilderHdr" (vp) 3 / 3 variants left after stripping, processed in 0.00 seconds starting compilation... finished in 0.00 seconds. Local cache hits 3 (0.00s CPU time), remote cache hits 0 (0.00s CPU time), compiled 0 variants (0.00s CPU time), skipped 0 variants Prepared data for serialisation in 0.00s Serialized binary data for shader Hidden/Universal Render Pipeline/LutBuilderHdr in 0.00s gles3 (total internal programs: 3, unique: 3) Compiling shader "TextMeshPro/Sprite" pass "Default" (vp) 4 / 4 variants left after stripping, processed in 0.00 seconds starting compilation... finished in 0.00 seconds. Local cache hits 4 (0.00s CPU time), remote cache hits 0 (0.00s CPU time), compiled 0 variants (0.00s CPU time), skipped 0 variants Prepared data for serialisation in 0.00s Serialized binary data for shader TextMeshPro/Sprite in 0.00s gles3 (total internal programs: 4, unique: 4) Asset has disappeared while building player to 'sharedassets0.assets' - path '', instancedID '15416' UnityEngine.StackTraceUtility:ExtractStackTrace () (at /home/bokken/build/output/unity/unity/Runtime/Export/Scripting/StackTrace.cs:37) UnityEditor.BuildPipeline:BuildPlayerInternal (string[],string,string,UnityEditor.BuildTargetGroup,UnityEditor.BuildTarget,int,UnityEditor.BuildOptions,string[]) (at /home/bokken/build/output/unity/unity/Editor/Mono/BuildPipeline.bindings.cs:449) UnityEditor.BuildPipeline:BuildPlayer (string[],string,string,UnityEditor.BuildTargetGroup,UnityEditor.BuildTarget,int,UnityEditor.BuildOptions,string[]) (at /home/bokken/build/output/unity/unity/Editor/Mono/BuildPipeline.bindings.cs:348) UnityEditor.BuildPipeline:BuildPlayer (UnityEditor.BuildPlayerOptions) (at /home/bokken/build/output/unity/unity/Editor/Mono/BuildPipeline.bindings.cs:322) UnityBuilderAction.Builder:BuildProject () (at Assets/Editor/Editor/UnityBuilderAction/Builder.cs:71)
原因と解決方法
いろいろ試している中で、以下の部分を変更することでビルドが通るようになりました。
var instance = ScriptableObject.CreateInstance<GameParameterData>(); instance.isDevelop = true; AssetDatabase.CreateAsset(instance, $"Assets/_Project/Scripts/GameParameter/GameParameter.asset"); AssetDatabase.Refresh();
上記のコードを #if UNITY_EDITOR_WIN
で囲むことによって、ローカルビルドの際のみ実行するようにしました。
#if UNITY_EDITOR_WIN var instance = ScriptableObject.CreateInstance<GameParameterData>(); instance.isDevelop = true; AssetDatabase.CreateAsset(instance, $"Assets/_Project/Scripts/GameParameter/GameParameter.asset"); AssetDatabase.Refresh(); #endif