うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】パスを指定してディレクトリを作成する

UnityProject 内部 で ディレクトリを作成する方法として AssetDatabase.CreateFolderSystem.IO.Directory.CreateDirectory(path) の2つが存在します

2つの違いを以下のとおりです

AssetDatabase.CreateFolder

"Assets/" から始まるディレクトリパスを指定する

途中にディレクトリが存在しない場合はエラーになる

System.IO.Directory.CreateDirectory(path)

ルートからのフルパスを指定する

途中にディレクトリが存在しなくても作成してくれる

AssetDatabase.CreateFolder を利用した再帰的にディレクトリを作成する処理

パスを AssetDatabase.IsValidFolder で存在するか見ていってなければ作成していく

private static void CreateFolderRecursively(string path)
{
    // Assetsから始まってない場合は処理できない
    if (!path.StartsWith("Assets/"))
        return;
 
    // AssetDatabase なので 区切り文字は /
    var dirs = path.Split('/');
    var combinePath = dirs[0];
    // Assets の部分はスキップ
    foreach (var dir in dirs.Skip(1))
    {
        // ディレクトリの存在確認
        if (!AssetDatabase.IsValidFolder(combinePath + '/' + dir))
            AssetDatabase.CreateFolder(combinePath, dir);
        combinePath += '/' + dir;
    }
}