yotiky Tech Blog

とあるエンジニアの備忘録

Unity - Path を操作する

目次

検証環境

  • LINQPad で代替

Path を操作する

yotiky.hatenablog.com

Assetsからの相対パス絶対パス

void Main()
{
    //var baseDir = Application.dataPath;
    var baseDir = @"C:\Projects\Sample1\Prj1\Assets";
    var relativeDir = @"C:\Projects\Sample1\Prj2\Assets";

    Path.GetFileName(baseDir).Dump();
    // 結果: Assets

    var relativePath = Path.GetRelativePath(baseDir, relativeDir);
    relativePath.Dump();
    // 結果: ..\..\Prj2\Assets

    Path.GetFullPath(Path.Combine(baseDir, relativePath)).Dump();
    // 結果: C:\Projects\Sample1\Prj2\Assets
}

Assets を含む相対パス

// dataPath = Application.dataPath;
dataPath = @"C:\Projects\Sample1\Prj1\Assets";

private string DefaltDataDir => "Assets";

private string GetRelativePathFromAssetsDir(string targetPath)
{
    var relativePath = Path.GetRelativePath(dataPath, targetPath);
    relativePath = relativePath == "."
        ? DefaltDataDir
        : Path.Combine(DefaltDataDir, relativePath);

    return relativePath;
}

void Main()
{
    var relativeDir = @"C:\Projects\Sample1\Prj2\Assets";

    GetRelativePathFromAssetsDir(dataPath).Dump();
    // 結果: Assets
    
    GetRelativePathFromAssetsDir(Path.Combine(dataPath, @"Data\Master")).Dump();
    // 結果: Assets\Data\Master
    
    GetRelativePathFromAssetsDir(relativeDir).Dump();
    // 結果: Assets\..\..\Prj2\Assets
}