GitHub ActionsでUnityのWebGLビルドしてGitHub PagesにDeployする
2022/04/25 21:30 | 公開 |
GameCIを使用してしてUnityのプロジェクトをGitHub ActionsでWebGLビルドしてGitHub PagesにDeployする方法です。
Unityのバージョンは2020 LTS版(2020.3.4f1)で確認しています。 現在の最新版の2021 LTS版ではない理由は最後に書きます。
Unityのプロジェクトの設定
まずWebGLビルド用の設定を行います。
ほぼデフォルトのままでも良いですがPlayerのPublishing SettingsのDecompression Fallback
を有効にしておきます。
GitHubのリポジトリにGitHubのライセンス情報を登録する
GitHubにライセンス情報を登録するには
- GitHubで使用するためのアクティベーションファイルをリクエストする
- アクティベーションファイルを使用してライセンスを取得する
- GitHubのリポジトリのSecretsにライセンスを登録する
という手順が必要です。 この手順は最初の1回だけで大丈夫です。
GitHubで使用するためのアクティベーションファイルをリクエストする
まずはUnityのライセンスをアクティベーションする必要があります。
GameCIのActivationで公開されているとおりに行います。
注意
ここで説明するのはPersonal licenseをアクティベーションする方法です。Professional licenseは方法が異なるのでActivationを確認してください。
.github/workflows/activation.yml
というファイル名で以下の内容を保存しpushします。
name: Acquire activation file
on:
workflow_dispatch: {}
jobs:
activation:
name: Request manual activation file 🔑
runs-on: ubuntu-latest
steps:
# Request manual activation file
- name: Request manual activation file
id: getManualLicenseFile
uses: game-ci/unity-request-activation-file@v2
# Upload artifact (Unity_v20XX.X.XXXX.alf)
- name: Expose as artifact
uses: actions/upload-artifact@v2
with:
name: ${{ steps.getManualLicenseFile.outputs.filePath }}
path: ${{ steps.getManualLicenseFile.outputs.filePath }}
GitHubのリポジトリのActionsからAcquire activation file
というWorkflowが実行可能になっているためRun workflow
を選択します。
Workflowが実行されるのでしばらく待ちます。
Workflowが完了した後詳細を確認すると
ArtifactsにUnity_v20XX.X.XXXX.alf
というファイルがあるのでそちらをクリックしダウンロードします。(XXの部分は使用するUnityのバージョンと異なっていても問題ないようです)
ダウンロードしたファイルは.zip
形式なので展開して中のUnity_v20XX.X.XXXX.alf
を取得します。
アクティベーションファイルを使用してライセンスを取得する
https://license.unity3d.com/manual
にアクセスし先程取得したUnity_v20XX.X.XXXX.alf
を選択します。
Nextを押すとライセンスを選択する画面に移るので適切な項目を選択します。今回私はPersonal licenseを使用しているので以下の画像のように選択しました。
Nextを押すとライセンスファイルをダウンロードできる画面に移るのでDownloadを押します。
するとUnity_v20XX.X.XXXX.ulf
というファイルがダウンロードされます。
(勢い余ってDownloadを押してしまったため黒くなっていますが実際は水色のボタンです)
GitHubのリポジトリのSecretsにライセンスを登録する
GitHubリポジトリのSettings
> Secrets
> Actions
からライセンス情報を登録します。
New repository secret
を押すとSecretを追加する画面に移ります。
NameにはUNITY_LINCENSE
と入力しValueにはダウンロードしたUnity_v20XX.X.XXXX.ulf
ファイルの中身を貼り付けます。Add secret
をクリックでライセンスの登録が完了します。
同じ要領でUNITY_EMAIL
とUNITY_PASSWORD
を登録します。UNITY_EMAIL
はUnityのログインに使用するemailアドレスでUNITY_PASSWORD
はUnityにログインするためのパスワードです。
全て追加すると以下のようにRepository secretsにUNITY_EMAIL
, UNITY_LICENSE
, UNITY_PASSWORD
が並びます。
注意
ここで追加するUNITY_PASSWORD
に特殊文字が含まれていると問題が発生するということがBuilderの項目に書かれていました。
GitHub ActionsでWebGLビルドしてGitHub PagesにDeployする
.github/workflows/main.yml
というファイル名で以下の内容を保存しpushします。
name: WebGL build and Deploy
on:
workflow_dispatch: {}
jobs:
build:
name: WebGL build
runs-on: ubuntu-latest
steps:
- name: Check out
uses: actions/checkout@v2
- name: WebGL build
uses: game-ci/unity-builder@v2
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
targetPlatform: WebGL
unityVersion: 2020.3.4f1 # 使用するUnityのバージョンに書き換えてください
- name: Deploy
uses: JamesIves/github-pages-deploy-action@4.1.3
with:
branch: gh-pages # gh-pagesブランチにdeployする
folder: build/WebGL/WebGL # ビルド結果のWebGL/WebGLフォルダの中身をdeployする
# ビルド結果をダウンロードできるようにする
# 必要なければ消しても大丈夫です
- name: Upload the WebGL Build
uses: actions/upload-artifact@v2
with:
name: Build
path: build
するとWebGL build and Deploy
というworkflowが選択できるようになっているのでRun workflow
で実行します。
workflowの実行が完了するとgh-pages
というブランチにビルド結果がpushされます。
この内容をGitHub Pagesで公開する設定を行います。
GitHub Pagesでの公開設定
GitHubリポジトリのSettings
> Pages
と進みGitHub Pagesの設定を行います。
公開するプランチとディレクトリを選べるのでhg-pages
と/(root)
を選択しSaveをクリックします。
すると「Your site is ready to be published at http://ユーザー名.github.io/リポジトリ名」というメッセージが表示されます。このメッセージが表示されたらリンク先に先程のビルド結果が公開されているはずです。
メインブランチにpushしたときやpull requestがマージされたときに自動でビルド&Deployする
現在on:
の中にworkflow_dispatch
しか書かれていませんがそれを下記の内容に書き換えてください。
on:
push:
branches: [ main ] # mainはメインブランチの名前に書き換えてください
pull_request:
branches: [ main ] # mainはメインブランチの名前に書き換えてください
workflow_dispatch: {}
これでメインブランチに変更があったときに自動でビルド&Deployされます。
その他
Project SettingsでDecompression Fallback
を無効にしたまま圧縮した場合
以下のように実行時に圧縮されたファイルの展開に失敗します。
Compression Format
をDisabled
にすることでも解決できますがファイルサイズが大きくなるのでおすすめしません。しかし許容できる方はそちらでも大丈夫です。
Unityのバージョンが2020 LTS版の理由
Linux(Ubuntu)で2021 LTS版(2021.3.0f1)のWebGLビルドを行うとビルドに成功はしましたが実行時にThe resource Internal-ErrorShader.shader could not be loaded from the resource file!
というエラーが大量に発生し正常に動作しないということあありました。
そのため今回は2020 LTS版でサンプルを作成しています。
ビルド時にキャッシュを利用する
キャッシュを利用することでビルドを高速化できます。
それにはUnityから公開されているactions/cache@v2
をsteps
の中のビルドの手前に以下の内容を追加するだけです。
- uses: actions/cache@v2
with:
path: path/to/your/project/Library # プロジェクトのLibraryフォルダへのパスに書き換えてください
key: Library-MyProjectName-TargetPlatform # MyProjectNameとTargetPlatformはプロジェクト名とターゲットのプラットフォームに書き換えてください
restore-keys: |
Library-MyProjectName- # MyProjectNameはプロジェクト名に書き換えてください
Library-
あとがき
ライセンスの登録など若干面倒な作業がありますが一度設定してしまえばあとはプロジェクトに変更があるたびに自動でビルドされDeployまでされるので快適です。
最終的にメインブランチにpushしたときに自動ビルド&Deployを行いビルド時にキャッシュを有効にしているものをサンプルとしてGitHubで公開しています。 リンクはページの先頭にあります。