はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】ランタイムでEnvironment.CurrentDirectory(作業ディレクトリ)を変更できるが終了前にProject直下に戻さないとダメ

はじめに

System.Environment.CurrentDirectoryをランタイムで変更させられることに気づきました。そのことについて書きたいと思います。

変更している様子

説明

public class Sample : MonoBehaviour
{
    private void Start()
    {
        // MacのUnity Editor上で動作された例
        
        // /Users/user/ProjectName
        Debug.Log(Environment.CurrentDirectory);
        
        // /Users/user/ProjectName/Assets
        Debug.Log(Application.dataPath);
        
        // 実はEnvironment.CurrentDirectoryを変更させることができる
        Environment.CurrentDirectory = Path.GetFullPath(Application.dataPath);
        
        // /Users/user/ProjectName/Assets
        Debug.Log(Environment.CurrentDirectory);
        
        // UnityのPlayモードが終了する前にProjectフォルダ直下に戻さないと怒られるので注意
        Environment.CurrentDirectory = Path.GetFullPath(Path.Combine(Application.dataPath, ".."));
    }
}

Environment.CurrentDirectory(作業ディレクトリ)にはsetterもあるので動的に変更させることができます。
learn.microsoft.com


ただしサンプルコードにも書いた通り、終了前にプロジェクトルートに戻さないとUnityを強制的に終了させられるので注意してください。

// UnityEditor上だとPath.Combine(Application.dataPath, "..")でプロジェクト直下のパスを指す
Environment.CurrentDirectory = Path.GetFullPath(Path.Combine(Application.dataPath, ".."));
エラーが出力されている様子