この記事はクラスター Advent Calendar 2023 シリーズ2の19日目の記事です
テクニカルアーティストをしているMSA_iです
詳しくは以下を
前回はTAAT626さんのクラスターに入社してもうすぐ1年でした
あっという間に一年経ちますよね!実際弊社はスペシャリストだらけだと思います
しかし、ガリガリ黙々とやっていて話しかけづらいなんてことはありません
僕も日々助けられつつ、刺激を受けながら働いています!
はじめに
Clusterで催しやろうと思うと会場が複数にまたがることがありますよね?
負荷の問題だったり、イベント進行の都合だったりなど理由は様々ですが会場を分けざるを得ないことがあります
また、自分が管理しているワールドに一斉に変更を入れたいとか、場合によってはアップデートによって会場の見た目が変わってしまったり…
そういう時にCCKのアップローダーからポチポチ会場をひとつずつアップロードするの大変ですよね?
アップロードを待っている間、PCを使えないのもつらい…
しかも、アップロードボタンを押して、数分待って、アップロードボタンを押して、待っての繰り返し…
つらい
そこで自動化してみようというのが今回の企画です
そうだ自動化しよう
流行りの自動化の波に乗って会場アップロードも自動化しよう!
…どのように???
CIツール
世には会場アップロードに限らず、アセットをすぐに使える状態にまとめてパッケージングする作業がたくさんあります
つまりビルドですね
そして、このビルドを自動化したい!という需要がたくさんあります
それらを実行するツールはCIツールと呼ばれています
Unity Build AutomationやCircleCI、Jenkinsなどなど
これ会場アップロードにも使えるんじゃない?
Let's Try!
実際にやってみようと思いますが、注意点があります
それは、Clusterの会場のビルドが通常の実行ファイルを生成するものではなく、AssetBundleを生成するものだということ
つまりは独自のビルドパイプラインだということになります
さらに言えばCCKによってアップロードまで半自動化されているのでそこに載っかるのが筋がよさそうです
Jenkinsは個人でシュッとやるには環境構築に時間がかかりすぎ、Unity Build AutomationだとUnityの既定のBuildフロー以外は実行できなさそうでしたので、今回はCircleCIを使ってみたいと思います
GameCIも利用します
-
基本的には以下の通りまずはセットアップしていきます
https://game.ci/docs/circleci/getting-started/ -
ライセンス形態によってUnityのアクティベーション方法が変わるので注意です
CircleCI向けのPersonalライセンスの方は古そうでしたので以下を
https://game.ci/docs/github/activation/#personal-license
Proは以下
https://game.ci/docs/circleci/activation/#professional-license
Windowsでは
certutil -encodehex -f "Unity_lic.ulf" "Unity_lic_base64.txt" 0x40000001 1>nul
とかやってBase64にエンコードするのが良さそうです -
そしてStaticなMethodが実行できるbuild-methodパラメータを使います
https://game.ci/docs/circleci/build/#build-method
config.ymlはこんな感じになりました
version: 2.1
orbs:
unity: game-ci/unity@1.7
workflows:
build-unity-project:
jobs:
- unity/build:
executor:
name: 'unity/ubuntu'
target_platform: 'linux-il2cpp'
editor_version: '2021.3.4f1'
resource_class: 'large'
build-target: 'StandaloneLinux64'
build-method: 'Editor.Uploader.Upload'
context: unity # UNITY_ENCODED_LICENSEやらUNITY_USERNAMEやらUNITY_PASSWORD
ここまで来たらあとは簡単です
UnityプロジェクトにStaticな会場アップロード用のMethodを用意してあげましょう
ClusterVR.CreatorKit.Editor.Window.View.UploadVenueView
あたりを参考にするのが良いかもしれません
※あくまでもハック的なものだと思ってください
※当然ですが公式でサポートされているものではありませんし、今後こんなことはできなくなるかもしれません
最後に
「人が足りません」
切実ですね
お力添えいただける方、ぜひお待ちしております