💭

【PowerShell】ターミナルからコマンドでUnityを立ち上げる

2024/09/05に公開

https://x.com/tigrig1129/status/1855973823042236626

前提

環境

  • Windows
  • Powershell
  • Unity (おそらく 2018 以後 / 筆者は 2021, 2022 で動作確認済み)

本記事で書かないこと

結論

$profile に以下を追記。

function Open-UnityEditor {
    $version = (Get-Content .\ProjectSettings\ProjectVersion.txt)[0].Split(":")[1].Replace(" ", "")
    $unityEditor = "C:/Program Files/Unity/Hub/Editor/" + $version + "/Editor/Unity.exe"
    $project = Convert-Path .
    Start-Process $unityEditor -ArgumentList "-projectPath" , $project
}

以下のように使用します。

# Unityプロジェクトのルートディレクトリに移動
cd C:\Hoge\Fuga\Piyo
# Unity起動
Open-UnityEditor

解説

function Open-UnityEditor {
    $version = (Get-Content .\ProjectSettings\ProjectVersion.txt)[0].Split(":")[1].Replace(" ", "")
    $unityEditor = "C:/Program Files/Unity/Hub/Editor/" + $version + "/Editor/Unity.exe"
    $project = Convert-Path .
    Start-Process $unityEditor -ArgumentList "-projectPath" , $project
}

上記の2行目( $version = のところ)で Unity Editor のバージョンを取得しているところが肝です。

Unity Editor はバージョンごとに、以下のように実行ファイルのパスが異なります。

C:\Program Files\Unity<version>\Editor\Unity.exe

参考: https://docs.unity3d.com/ja/2018.4/Manual/GettingStartedInstallingHub.html

そのためプロジェクトフォルダ内からエディタバージョンを拾ってきて、実行ファイルパスを生成する必要があります。

エディタバージョンは ProjectSettings\ProjectVersion.txt の 1 行目に記載されています。

ProjectSettings\ProjectVersion.txt
m_EditorVersion: 2022.3.8f1 ← ★これ!
m_EditorVersionWithRevision: 2022.3.8f1 (abcdef012345)

以下の1文で、エディタバージョンを抜き取り、

$version = (Get-Content .\ProjectSettings\ProjectVersion.txt)[0].Split(":")[1].Replace(" ", "")

以下の1文で実行ファイルパスを生成しています。

$unityEditor = "C:/Program Files/Unity/Hub/Editor/" + $version + "/Editor/Unity.exe"

あとは Unity Editor のコマンドライン引数 に、起動対象のプロジェクトのパス(カレントディレクトリ)を設定して Start-Process しています。

$project = Convert-Path .
Start-Process $unityEditor -ArgumentList "-projectPath" , $project

あとがき

Unity を使い始めた頃は Unity Hub という便利なツールがあるんだなぁ、ここから一元管理できて便利だなぁ、みたいに思っていました。

しかし Unity でいくつかゲームを作るようになってから、いちいち Unity Hub を開くのが面倒 と感じるようになりました……。

開発作業するとき、私は VSCode (のターミナル) や Windows Terminal を最初に立ち上げて、そこからコマンドベースで諸々操作することが多く、 Unity Hub を立ち上げて GUI で操作するという行動が手間になっていました。

そこで、普段のコマンドライン操作で Unity を起動できれば最高じゃない! と思ったのがきっかけで上述のコマンドレットを作成しました。

ちなみに私は以下のようにエイリアスを設定して uni で Unity が起動できるようにしています。

Set-Alias -Name uni -Value Open-UnityEditor -Option None

以上、同じ悩みを持っている方の参考になれば幸いです!

Discussion