Unityエディタ拡張をしてたりしてエディタを再起動する機能を追加する時にググったコードだとUnityHubが起動するまでは行くけどそのあとにプロジェクトを開いてくれなかったのでちょっと調べてみた。
最初に試したコード
よくあるのは以下のような Process.Start でアプリケーションのパスを指定し、アプリ起動をしてからエディタを閉じる方法
static void Restart()
{
Process.Start(EditorApplication.applicationPath);
EditorApplication.Exit(0);
}
ただこの方法だと 2023/08/28 現在では UnityHub が開くのみでプロジェクトまでは開いてくれなった
解決策
Unityのフォーラムを見つけたのでそのコードを試してみた
https://forum.unity.com/threads/is-there-an-api-to-restart-the-editor-via-script.1021639/
static void Restart()
{
EditorApplication.OpenProject(Directory.GetCurrentDirectory());
}
Unity の CsReference 覗いてみたところエディタの再起動は以下のようなコードになっていた
https://github.com/Unity-Technologies/UnityCsReference/blob/62633e3912ab891be4c6f5ef4500e69f59d85ed4/Editor/Mono/Inspector/PlayerSettingsEditor/PlayerSettingsEditor.cs#L2916
Environment.CurrentDirectory と Directory.GetCurrentDirectory() はどちらもカレントディレクトリのパスを返すプロパティ or メソッド
どちらを使うかはほぼ好みに分かれるけど Environment.CurrentDirectory の方は setter でカレントディレクトリを移動出来てしまうので取得オンリーの Directory.GetCurrentDirectory() を採用した