はじめに
この記事はUnity Advent Calendar 2024 13日目の記事です。
皆さんはUnityでどのOSに出力しているでしょうか?
モバイル用のiOS/AndroidあるいはデスクトップのWindows/MacOSに出力している方がほとんどだと思います。
今回は出力先としては珍しいLinuxについて解説します。
LinuxでUnityを使う利点として、WindowsやMacの使用にかかるライセンス料を大幅に減らすことができます。また、Unityを組み込みソフトとして使う場合や、AWS/Google Cloud(GCP)などのクラウド上で使う場合に選択肢として考えられます。
環境の準備
公式サイトではUnityを使えるLinuxのディストリビューションとして下記がリストアップされています。
System requirements
CentOS 7
Rocky
Ubuntu versions 20.04 and 22.04
https://docs.unity3d.com/hub/manual/InstallHub.html
今回の記事ではAWS上にUbuntu環境を用意し、そこにUnityをインストールします。既に環境がある方は、この節を飛ばしていただいて問題ありません。
AWSではNICE DCVというリモートデスクトップの機能があります。こちらの機能を含んだAMIをMarket Placeから探してきてインスタンスを立ち上げます。インスタンスタイプにはg4dn.xlarge
などGPU付きを指定します。
NICE DCVはセキュリティグループでUDP/TCPともに8443
ポートを空けておく必要があります。また、SSH接続用にTCPの22
も開けておきます。
最近のUnityは大きな容量を要求するのでストレージを少し大きめに設定しておきます
立ち上がったばかりのインスタンスにはパスワードが設定されていないので、コンソールから接続し下記のコマンドでパスワードを設定します。なお、初期のユーザー名がubuntu
になっています。
sudo passwd ubuntu
NICE DCVクライアントを使って接続します。
上手くいくとUbuntuのデスクトップが表示されます。これで環境設定は完了です。
Unity Editorのインストール
ここからUnity Editorをインストールしていきます。
公式サイトに記載の手順で進めていきます。下記はUbuntuでの説明になります。
下記の4コマンドでUnityHubのインストールができます。
wget -qO - https://hub.unity3d.com/linux/keys/public | gpg --dearmor | sudo tee /usr/share/keyrings/Unity_Technologies_ApS.gpg > /dev/null
sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/Unity_Technologies_ApS.gpg] https://hub.unity3d.com/linux/repos/deb stable main" > /etc/apt/sources.list.d/unityhub.list'
sudo apt update
sudo apt-get install unityhub
上手くインストールができたらアプリケーション一覧にUnityHubのアイコンが表示されます
アイコンをクリック、またはunityhub
コマンドでUnityHubが起動します。
この時下記のエラーが出て実行できないことがあります。
A JavaScript error occurred in the main process
Uncaught Exception:
Error: /tmp/.org.chromium.Chromium.LesfF5: failed to map segment from shared object
こちらはsudo mount -o remount,exec /tmp
のコマンドを実行してから、UnityHubを実行すると直すことができます。
UnityHubが実行できたら、ログインしUnity Editorをインストールします。
プロジェクトが開きました。
ここまで出来たら後はいつものUnityと変わりありません。
バイナリを実行する
ビルドができたら実行ファイルをクリック、またはコンソールから叩くことで実行できます
もし実行できない場合は、実行権限が付与されているか確認しましょう
Linuxで制作する際の注意事項
ネイティブプラグインを使用する際は、Linux向けにビルドされたプラグインが必要になります。
既存のプロジェクトを移植する場合や、アセットストアからプラグインを入手した場合は注意が必要になります。
一方でC#で作成されたマネージドなプラグインであれば、Linuxでもそのまま使うことができます(DoTween、UniTask、UniVRMなど)
Github Actionsを使ってビルドする
ここまでLinuxにUnityをインストールしてビルドするまでを紹介してきました。Linux版のUnityを使って開発することも可能ですが、使い慣れたWindowsやMacで開発を行い、最終出力だけLinux版のバイナリが欲しいという方もいるでしょう。
そういう方のために、Github Actionsを使ってビルドできる方法を簡単に紹介します。
環境構築についてはこちらの記事を参照してください。
環境構築ができたら、下記のYAMLでLinux版のビルドができます。
基本のファイルからTarget PlatformをStandaloneLinux64
に変更しただけになります。
# 名前を付ける。これがGithubActions上に表示される
name: Run the Linux build
on:
workflow_dispatch: {}
jobs:
build:
name: Run the Linux build
runs-on: ubuntu-latest
steps:
# リポジトリのチェックアウト
- name: Check out my unity project.
uses: actions/checkout@v4
- name: Create LFS file list
run: git lfs ls-files -l | cut -d' ' -f1 | sort > .lfs-assets-id
# LFSファイルのキャッシュを取得する
- name: Restore LFS cache
uses: actions/cache@v4
id: lfs-cache
with:
path: .git/lfs
key: ${{ runner.os }}-lfs-${{ hashFiles('.lfs-assets-id') }}
# LFSファイルをPullする
- name: Git LFS Pull
run: |
git lfs pull
git add .
git reset --hard
# ファイル名にgitのハッシュを含めたいので$GITHUB_OUTPUTに保存しておく
- name: Set outputs
id: vars
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
# Cache
- uses: actions/cache@v4
with:
path: Library
key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
restore-keys: |
Library-
# Unityプロジェクトのビルド
# 設定しない場合、buildフォルダに出力される
- name: Run the Linux build
uses: game-ci/unity-builder@v4
env:
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
with:
targetPlatform: StandaloneLinux64
unityVersion: 2022.3.0f1 #ここに使うUnityのバージョンを入れる
# 成果物をZIPにしてアップロードする
- name: Upload the Linux Build
uses: actions/upload-artifact@v4
with:
name: Build-${{ steps.vars.outputs.sha_short }}
path: build
このActionを実行し、うまくビルドできるとZIPファイルがGithub上にアップロードされます
このファイルをLinuxに転送します。
ZIPファイルを展開するとStandaloneLinux64
というフォルダが生成されます。
この中のStandaloneLinux64
というファイルが実行ファイルになります。
おわりに
LinuxでUnityを使うというニッチな技術を紹介しました。
Linuxを使うことでコスト性に優れたシステムを組むことができます。
是非参考にしてみてください