Unityプロジェクトのバージョン管理にGitHubを使用している場合、GitHub ActionsワークフローでWebGLビルドを行ない、そのままGitHub Pagesに公開する方法を紹介します。
GitHub Pagesは、GitHubリポジトリに紐づく静的コンテンツをホスティングできる機能です。 公開できるサイズが10GB以下ということと、たとえprivateリポジトリであってもGitHub Pagesにはアクセス制限はかけらない*1という制限がありますので注意してください。
Unity - Builder アクション
ビルドには、GameCIの提供するUnity - Builder アクションを使用しています。 利用方法は公式サイトか、検索すれば日本語情報もありますので割愛します。
なお、CIをキックするユーザーはUnityのライセンスを持っている必要があります*2。publicなリポジトリで使用する場合は特に注意してください*3。
また、現在パーソナルライセンスのCLIによる新規アクティベーションは塞がれています。次のIssueを参照してください。
GitHub Pages
GitHub Pagesで公開するコンテンツは、リポジトリの特定ブランチにあらかじめチェックインするか、GitHub Actionsによってアーティファクトにアップロードしたものを使用できます。
後者であれば、リポジトリにビルド成果物をチェックインする必要がなく便利です。 本例ではこの方法を紹介します。
まず、GitHubリポジトリのSettings > Pagesを開き、SourceはGitHub Actionsを選択します。
すると、リポジトリのEnvironmentsにgithub-pages
が追加されます。
あとはワークフローで、WebGLビルド出力をtarで固めてgzipしたものをgithub-pages
という名前でアーティファクトにアップロードすることで、動作するゲームが https://OWNER.github.io/REPO/
で公開されます。
なお、GitHub Pagesで公開するWebGLは、Compression FormatをDisabled
に設定しなければなりません。公開は行われますが実行時に次のエラーが出ます。
Unable to parse Build/WebGL.framework.js.gz! This can happen if build compression was enabled but web server hosting the content was misconfigured to not serve the file with HTTP Response Header "Content-Encoding: gzip" present. Check browser Console and Devtools Network tab to debug.
しかし、ゲームをunityroomで公開する場合、Compression FormatはGzip
に設定する必要があります。
これを手動で切り替えるのは事故の元ですので、ワークフロー内でビルド前に書き換えています。
詳しくは、下記実装例を参照してください。
ワークフロー実装例
次のワークフローをリポジトリの.github/workflows下に置くことで、masterブランチにpush(もしくはPRをマージ)されるたびにWebGLビルドが実行され、GitHub Pagesで公開されます。
name: Deploy to GitHub Pages on: push: branches: - master # masterブランチにpushされるたびにWebGLビルドして公開。条件はプロジェクトのニーズによって調整してください concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true # 先行ジョブがあればキャンセル jobs: build: runs-on: ubuntu-latest permissions: contents: read steps: - uses: actions/checkout@v4 - name: Set CompressionFormat to Disabled run: | sed -i -e 's/webGLCompressionFormat: ./webGLCompressionFormat: 2/' ProjectSettings/ProjectSettings.asset # Compression Formatを`Disabled`に書き換え - uses: game-ci/unity-builder@v3 with: targetPlatform: WebGL allowDirtyBuild: true # 上でProjectSettings.assetを変更しているため指定 env: UNITY_LICENSE: ${{ secrets[UNITY_LICENSE_2022] }} - uses: actions/upload-pages-artifact@v2 with: path: build/WebGL/WebGL # WebGLビルド出力をアーティファクトにアップロード deploy: runs-on: ubuntu-latest needs: build permissions: id-token: write pages: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v2 # GitHub Pagesに公開